我有一个通过第三方库获得约会的系统。我知道一个事实是,输入的日期是1914-08-28,我不关心时间和分钟。我需要把这个日期传递给客户,它的格式应该是1914-08-28T00:00。
我从第三方库中得到的是一个java.util.Date,在调试时,我偶然发现了一些在我看来很奇怪的东西。
看看下面的图片。我有一个约会,当打电话给toString()时,它会返回清华8月27日22:00(1914年),但是当你看到包含的cdate时,它看起来就像是在祖鲁时代。

用DateFormat格式化它给我1914-08-27T00:00。
java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'00:00");我真正期望的是,我在祖鲁时间(1914-08-27T22:00Z)有一个日期,相当于1914-08-28T00:00 (第二天)。
这可以用下面的代码来再现。
Calendar instance.set(1914, 7, 28, 22, 0);
instance.setTimeZone(TimeZone.getTimeZone("CET"));
Date d = instance.getTime();现在,d将显示CET时间,而cdate (可见的调试)将显示祖鲁时间,但它们没有什么不同。如果使用默认时区,我希望CET时间与祖鲁时间不同。
对此有何解释?
发布于 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.time或Joda时间,它们都是非常优秀的日期/时间API.
https://stackoverflow.com/questions/25544586
复制相似问题