【发布时间】:2019-03-12 06:10:10
【问题描述】:
我在我的应用程序中编写了一个实用程序,它接受一个时区并返回一个日期(java.util.Date),如下所示 -
// Inside MyDateHelper.java
public static java.util.Date getTimeForTimeZone(String timeZoneId)
{
final Date currentDate = Calendar.getInstance(TimeZone.getTimeZone(timeZoneId)).getTime();
return currentDate;
}
我在互联网上进行了研究,发现 Date 中没有任何 timeZone 信息。相反,它是一个从 1970 年开始的长值的包装器。所以,我的问题是,我是否必须获取当前的日期时间瞬间,交易已经发生以存储在日期字段(类型为 java.util.Date ), 这个实用程序有什么用吗?
出于所有实际目的,这两行代码实现的效果相同吗?
transactionEntry.setTime(MyDateHelper.getTimeForTimeZone("UTC+7:00"));
或
transactionEntry.setTime(new Date());
我还检查了新的 Java 8 Time API,但出于我的目的,我认为这样做也有点矫枉过正,没有更多的收获new Date() -
Date date4 = new Date();
LocalDateTime localDate = date4.toInstant().atZone(ZoneId.of("UTC+07:00")).toLocalDateTime();
final ZonedDateTime dateWithZone = localDate.atZone(ZoneId.of("UTC+07:00"));
Date dateOutput = Date.from(dateWithZone.toInstant());
transactionEntry.setTime(dateOutput);
整个目的是使用时区捕获事务发生的时间,但我只能将时间存储为 java.util.Date。无论交易发生在哪个时区,Date 都能正确捕捉到时间,对吧?有人可以确认这种理解是正确的吗?
【问题讨论】:
标签: java datetime java-8 timezone java-time