【问题标题】:Java 8 LocalDateTime to Date Lost TimezoneJava 8 LocalDateTime 到日期丢失时区
【发布时间】:2015-08-22 16:28:45
【问题描述】:

我有这个代码,我系统的默认时区是 PDT。时区转换后,finalDate 以 PDT 显示时间。如何让它在“亚洲/新加坡”中显示 finalDate?

String strDate = 201507081245;
DateTimeFormatter mx3DateFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
LocalDateTime localDateTime = LocalDateTime.parse(strDate, format);
Instant instant = localDateTime.atZone(ZoneId.of("Asia/Singapore")).toInstant();
Date finalDate = Date.from(instant);

【问题讨论】:

  • java.time 框架运行良好。问题是您对java.util.Date 的工作方式有误解。请参阅 Codebender 的 correct Answer。为了向其他读者澄清,尽量避免使用旧的 java.util.Date 和 .Calendar 类。 java.time 类取代了那些旧的麻烦类。在这个问题的代码中,不需要从 java.time 转换为 java.util.Date 的最后一行,除非需要与其他一些尚不知道新 java.time 类型的代码进行互操作。

标签: java date timezone


【解决方案1】:

java.util.Date 对象并非特定于特定时区。然而,它的 toString 方法应用了你的 JVM 当前的默认时区。

您可以要求它使用DateFormat(例如SimpleDateFormat)打印特定时区的时间。

类似的,

    SimpleDateFormat dateFormat = new SimpleDateFormat("hhhhMMddHHmm");
    dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Singapore"));
    System.out.println(dateFormat.format(finalDate));

【讨论】:

    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2016-07-03
    • 2017-12-19
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多