【发布时间】:2021-12-26 10:38:56
【问题描述】:
我想将时间戳列数据插入 MySQL 列。我所在位置的时区是 GMT+3。以下是我为考虑这个时区所做的事情:
Calendar now = Calendar.getInstance();
TimeZone timeZone = now.getTimeZone();
int differenceUTCms = timeZone.getRawOffset();
int differenceHeureUTC = Integer.parseInt(String.valueOf(TimeUnit.MILLISECONDS.toHours(Long.valueOf(String.valueOf(differenceUTCms)))));
now.setTime(new Date());
if (differenceUTCms <= 0) {
now.add(Calendar.HOUR, Math.abs(differenceHeureUTC) + 3);
} else {
now.add(Calendar.HOUR, Math.abs(3 - differenceHeureUTC));
}
query.setParameter(i, now.getTime());
但在运行时我仍然得到 07:24:32 而不是 10:24:32 的小时部分!那么有什么问题呢?
【问题讨论】:
-
我建议你不要使用
Calender和TimeZone。这些课程设计不良且早已过时。而是使用例如OffsetDateTime和ZoneId,两者都来自java.time, the modern Java date and time API。 -
它们可以与 Java 8 一起使用吗?
-
是的。它们完全是在 Java 8 中引入的,所以是内置的。
-
是的,数据类型是
timestamp。query是本机查询:javax.persistence.Query query = entityManager.createNativeQuery(sql); -
无关:不要使用字符串将
long转换为int。写int differenceHeureUTC = (int) TimeUnit.MILLISECONDS.toHours(differenceUTCms);
标签: java timezone timezone-offset