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

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

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

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"};

2.String类型转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);

3.Date类型转String

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

4.Timestamp类型转Date

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

5.Date类型转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.sql中如何实现"时间转换"以及"时间加减"

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' 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java,使用JDBC(Java Database Connectivity)库连接数据库并执行SQL语句进行时间查询是很常见的。如果你想要查询某个特定时间范围内的数据,通常会使用`BETWEEN`或`>=`和`<=`操作符。这里是一个简单的示例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class TimeQueryExample { private static final String URL = "jdbc:mysql://localhost:3306/your_database"; private static final String USER = "your_username"; private static final String PASSWORD = "your_password"; public static void main(String[] args) { String sql = "SELECT * FROM your_table WHERE timestamp_column BETWEEN ? AND ?"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement pstmt = conn.prepareStatement(sql)) { // 设置时间参数,假设时间是以Timestamp或Date类型存储 pstmt.setTimestamp(1, new Timestamp(currentTime.getTime())); pstmt.setTimestamp(2, new Timestamp(endTime.getTime())); ResultSet rs = pstmt.executeQuery(); // 处理查询结果 while (rs.next()) { // rs对象提供了处理每一行数据的方法 // ... } } catch (SQLException e) { e.printStackTrace(); } } // 当前时间和结束时间的获取 private static java.util.Date currentTime = new java.util.Date(); private static java.util.Date endTime = new java.util.Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000); // 查询未来一天的数据 // 更改此处以适应你的数据库驱动和表名、列名 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小树ぅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值