首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解读java.util.Date

解读java.util.Date
EN

Stack Overflow用户
提问于 2014-08-28 08:49:45
回答 1查看 187关注 0票数 1

我有一个通过第三方库获得约会的系统。我知道一个事实是,输入的日期是1914-08-28,我不关心时间和分钟。我需要把这个日期传递给客户,它的格式应该是1914-08-28T00:00。

我从第三方库中得到的是一个java.util.Date,在调试时,我偶然发现了一些在我看来很奇怪的东西。

看看下面的图片。我有一个约会,当打电话给toString()时,它会返回清华8月27日22:00(1914年),但是当你看到包含的cdate时,它看起来就像是在祖鲁时代。

用DateFormat格式化它给我1914-08-27T00:00。

代码语言:javascript
复制
java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'00:00");

我真正期望的是,我在祖鲁时间(1914-08-27T22:00Z)有一个日期,相当于1914-08-28T00:00 (第二天)。

这可以用下面的代码来再现。

代码语言:javascript
复制
Calendar instance.set(1914, 7, 28, 22, 0);
instance.setTimeZone(TimeZone.getTimeZone("CET"));
Date d = instance.getTime();

现在,d将显示CET时间,而cdate (可见的调试)将显示祖鲁时间,但它们没有什么不同。如果使用默认时区,我希望CET时间与祖鲁时间不同。

对此有何解释?

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 08:56:07

java.util.Date并不在任何特定的时区--它只是一个瞬间,在世界各地都会有不同的本地时间。

在内部,从Unix时代到现在有几毫秒的时间,但坦白地说,它可能是不同的表示形式.虽然我们通常认为“Unix时代”是1970-01-01T00:00:00 Z,但你也可以把它想象成1970-01-01T01:00:00+01:00.它们代表着同样的时间点。

从根本上说,停止将java.util.Date视为处于任何时区--它不是,而且toString()总是只使用系统默认时区,这让许多开发人员感到困惑。始终使用专用格式化程序(例如SimpleDateFormat),并指定您感兴趣的时区。

哦,最理想的情况是使用java.timeJoda时间,它们都是非常优秀的日期/时间API.

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

https://stackoverflow.com/questions/25544586

复制
相关文章

相似问题

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