首页
学习
活动
专区
圈层
工具
发布

Jdeveloper
EN

Stack Overflow用户
提问于 2015-10-14 10:06:12
回答 1查看 161关注 0票数 0

当我在JDeveloper中运行下面的java代码时,我得到了错误的输出。原因是什么呢?

代码语言:javascript
复制
    System.out.println(TimeZone.getTimeZone("Australia/Sydney").inDaylightTime(new Date()));
    System.out.println(TimeZone.getTimeZone("Europe/Moscow").inDaylightTime(new Date()));

我期望输出为:真假

但是,我明白它是假的。

PS:这对于“美国/韦恩堡”和“欧洲/柏林”这样的时区来说是正确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 10:24:52

由于new Date()的使用并不完全遵循How to create a Minimal, Complete, and Verifiable example的原则,因此如下所示:

代码语言:javascript
复制
public static void main(String[] args) {
    Date date = new Date(1444817534489L); // 2015-10-14 10:12:14.489 UTC
    printDate(date, "UTC");
    printDate(date, "Australia/Sydney");
    printDate(date, "Europe/Moscow");
    printDate(date, "Europe/Berlin");
    printDate(date, "America/Fort_Wayne");
}
private static void printDate(Date date, String timeZoneID) {
    TimeZone timeZone = TimeZone.getTimeZone(timeZoneID);
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
    df.setTimeZone(timeZone);
    System.out.printf("%-20s %-30s inDaylightTime: %s%n", timeZoneID + ":",
                      df.format(date), timeZone.inDaylightTime(date));
}

输出

代码语言:javascript
复制
UTC:                 2015-10-14 10:12:14.489 UTC    inDaylightTime: false
Australia/Sydney:    2015-10-14 21:12:14.489 AEDT   inDaylightTime: true
Europe/Moscow:       2015-10-14 13:12:14.489 MSK    inDaylightTime: false
Europe/Berlin:       2015-10-14 12:12:14.489 CEST   inDaylightTime: true
America/Fort_Wayne:  2015-10-14 06:12:14.489 EDT    inDaylightTime: true

所以,true false正如你所期望的。如果你看到不同的,也许你的约会是不同的,如果没有打印,你怎么会知道?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33122438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档