奇怪的事情。我有SQLite Android数据库,其日期保持为长值。我将它们读为Date对象,例如:

new Date (cursor.getLong(4))


接下来,在显示时,我使用toString()方法将Date对象转换为String。但是,有时显示的字符串包含CET,有时包含CEST。

确保添加时区信息这一事实不足为奇。令人惊讶的事实是,在同一设备上,值是在同一时间从数据库获取的,因为它是长值,因此不包含任何区域时间信息,所以Java有时会添加CET,有时会添加CEST。为什么会有这样的差异?

唯一的区别是,给出结果CEST的长值的时间等于00:00:00,而给出结果CET的长值的时间不同。

任何的想法?

最佳答案

这些值本身完全与时区无关,但是您的设备并非如此。您的设备有两个时区,即CET和CEST,作为其区域设置的一部分。夏令时有效/有效的时间是在CEST中给出的,其他日期则记录为CET。

如果您将设备设置为不遵守夏令时的语言环境,则只会报告该时区。

要了解为什么这样做有意义,请考虑是否问我现在几点了,我说“ CEST 13:35”。因为CEST是UTC + 2,所以我是对的,但是您可能会感到困惑。因为一年中的这个时候不使用CEST,所以只有在CET中指定时间才有意义。这就是为什么时区会随日期而变化的原因。

07-27 13:45