【发布时间】:2015-09-16 16:05:42
【问题描述】:
我正在开发一个库来将复杂数据存储在一个对象中。此对象中的字段之一是日期。当我使用 setter 方法设置日期时,假定日期对象位于 GMT 时区。在内部,Date 存储为一个 long 和从 epoch 开始的毫秒数。在我的get() 方法中,我正在执行以下操作:
return new Date(storedDateinMilliseconds);
问题是,如果有人在返回的对象上调用toString(),它会使用默认时区来返回日期。因此,返回的日期并不总是与 GMT 提供的日期匹配。有没有办法来解决这个问题?这样这个实现的用户在调用toString() 时总是会得到 GMT 日期?
我尝试了以下方法:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
但这会修改使用它的应用程序的默认时区。
【问题讨论】:
-
不要打电话给
toString()。使用SimpleDateFormat对其进行适当的格式化。 -
@SotiriosDelimanolis 我认为他的问题是“如果有人在返回的对象上调用 toString()”,而不是他正在调用 toString()。
-
@chrisl08 客户可能会做很多错误的事情。您,设计者,决定返回一个
Date对象。他们用它做什么取决于他们。 -
如果您绝对希望日期与时区相结合,请不要使用日期。因为日期没有时区。使用公历。或者更好的是,joda-time DateTime。但你不应该打扰:如果客户不明白 Date 是什么,而且它没有时区,那是客户的问题,而不是你的问题。
-
感谢所有 cmets。我了解 java.sql.Date 或 java.util.Date 有问题。但是我无法控制返回 Date 对象后用户会做什么。我想了解如何设定期望值。