Java 中new Date 时区问题怎么解决?数据库存储的2023-05-01 返回却是2023-04-30T16:00:00.000+00:00
时间: 2024-02-20 11:58:22 浏览: 153
Java 中的 Date 类型和数据库中的时间戳都是以 UTC 时间为基准进行存储和计算的,因此在使用时需要注意时区的转换。
如果你在创建 Date 对象时不指定时区,则会使用默认时区。如果你想要使用指定的时区创建 Date 对象,可以使用 Calendar 类的 setTimeZone() 方法来设置时区,例如:
```
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
Date date = cal.getTime();
```
在将数据库中的时间戳转换为 Date 对象时,可以使用 SimpleDateFormat 类将字符串转换为 Date 对象,并指定时区,例如:
```
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
Date date = sdf.parse("2023-05-01");
```
这样就可以将字符串 "2023-05-01" 转换为东八区的时间 2023-05-01 00:00:00。
另外,如果你想要将 Date 对象格式化为指定时区的字符串,也可以使用 SimpleDateFormat 类,并指定时区,例如:
```
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String dateString = sdf.format(date);
```
这样就可以将 Date 对象格式化为东八区的字符串,例如 "2023-05-01T00:00:00.000+08:00"。
阅读全文