【Java基础】Java中如何实现“时间转换“以及“时间加减“ + sql中如何实现“时间转换“以及“时间加减“(postgresql)

时间:2025-04-01 19:31:20

前言:
最近遇到这样的需求:查询XX天内的数据以及查询输的数据每个自然日有多次的只算为一次
拿到需求之后猛地发现自己对时间渐渐和转换这一块的知识点掌握的并不好,所以在这里进行一次小结,后续会遇到时间相关的问题也会在这里进行补充。

中实现"时间转换"以及"时间加减"

1.1 Java中实现"时间转换"

Java的时间转换通常使用SimpleDateFormate类进行实现
1.常用的时间格式

    private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
            "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};

类型转Date

   SimpleDateFormate sdf = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
   Date date = sdf.parse("2022-09-26 16:46:00")
   System.out.println("String转Date:"+date);

类型转String

   SimpleDateFormate sdf = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
   String date = sdf.format(new Date());
   System.out.println("Date转String:"+date);

类型转Date

	Long timestamp = System.currentTimeMillis();
	Timestamp timestamp1 = new Timestamp(timestamp);
	//是Timestamp的父类
	Date date = timestamp1;
	System.out.println(date);
	//2.
	Date date1 = new Date(timestamp1.getTime());
	System.out.println(date1);

类型转Timestamp

	Date date = new Date();
	Timestamp timestamp1 = new Timestamp(date.getTime());
	System.out.println(timestamp1);

1.2 Java中实现"时间加减"

Java中对时间的加减操作通常使用Calendar类去实现的,Calendar类提供的add()方法,可以通过该方法实现对时分秒的加减操作。

1.在日期上增加数个整年(n为负数则是减少数年)

   public static Date addYear(Date date, int n) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.YEAR, n);
       return cal.getTime();
   }

2.在日期上增加数个整月(n为负数则是减少数月)

    public static Date addMonth(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, n);
        return cal.getTime();
    }

3.在日期上增加数个整日(n为负数则是减少数日)

    public static Date addDay(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, n);
        return cal.getTime();
    }

4.在日期上增加数个小时(n为负数则是减少数小时)

    public static Date addHour(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.HOUR_OF_DAY, n);
        return cal.getTime();
    }

5.在日期上增加数个分钟(n为负数则是减少数分钟)

    public static Date addMinute(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, n);
        return cal.getTime();
    }

中如何实现"时间转换"以及"时间加减"

2.1 postgresql实现时间的加减运算

以当前时间为now()为例:
SELECT now()::timestamp + (interval) '1 year';  --当前时间加1年 (interval可以写也可以不写)

SELECT now()::timestamp + (interval) '1 month';  --当前时间加一个月

SELECT now()::timestamp + (interval) '1 day';  --当前时间加一天

SELECT now()::timestamp + (interval) '1 hour';  --当前时间加一个小时

SELECT now()::timestamp + (interval) '1 min';  --当前时间加一分钟

SELECT now()::timestamp + (interval) '1 sec';  --加一秒钟

select now()::timestamp + (interval) '1 year 1 month 1 day 1 hour 1 min 1 sec';  --加1年1月1天1时1分1秒

SELECT now()::timestamp + (col || ' day')::interval FROM table --把col字段转换成天 然后相加

2.2 postgresql实现字符串转日期

字符串转日期之后再进行时间加减
1.to_date(text,text), 在PostgreSQL 里 也是将字符串转换成日期, 但是 仅仅是年月日部分,就算我们在方法里指定了格式亦是如此,比如:
select to_date('2019-01-15 18:33:41','yyyy-MM-dd hh24:mi:ss');
结果:2019-01-15(时分秒被拿掉了)
正确姿势如下:
2.select to_timestamp('2019-01-15 18:33:41','yyyy-MM-dd hh24:mi:ss')
结果就是
2019-01-15 18:33:41+00

时间加减例子:
select *
from aia_t_vcs_jjdb 
where jjsj > to_timestamp('2022-09-17 15:38:28.926','yyyy-MM-dd hh24:mi:ss')- interval '30 day'