【问题标题】:UTC Timezone is not detecting Daylight saving s timeUTC 时区未检测夏令时
【发布时间】:2014-08-11 02:06:20
【问题描述】:

我有以下代码。

//this line returns - UTC
TimeZone timeZone = TimeZone.getDefault();
//date1 - todays date in UTC format
boolean dstInit = timeZone.inDaylightTime(date1);
//date2 - todays date in UTC format
boolean dstNext = timeZone.inDaylightTime(date2); 

但由于某种原因,dstInit 和 dstNext 都返回 false(而不是 TRUE)。 date1 和 date2 是 UST 格式的 2014 年 6 月 20 日,它在 3 月和 10 月之间的 DST 时间。谁能帮我解决这个问题?

【问题讨论】:

  • 我的理解是,我非常愿意在这里进行更正,UTC 是一个固定时间,夏令时是单独的,例如BST 是英国夏令时,是 UTC + 1(提前一小时)。所以它可以设置在 UTC 并且首先不涉及 DST。 stackoverflow.com/questions/2532729/…
  • UTC 不随季节变化;它没有夏令时。

标签: java date timezone dst


【解决方案1】:

UTC 不是一种格式。这是一个计时系统。

  • TAI - 从精确的原子钟测量

  • UT1 - 从不精确的地球自转中测得

  • UTC - 计算通过将leap seconds 添加到 TAI 以使其在 UT1 的 0.9 秒内对齐。

UTC 是我们在计算中使用的通用标准。 UTC 时间可以用多种格式表示,但是对于每个人来说总是相同的时间。它不受时区影响,并且它从不daylight saving time 改变。

【讨论】:

  • 确实如此,但也可能会产生误导。在实践中,UTC 也被视为一个时区(基本上相当于 GMT+0)。事实上,在 Java 中,它是可用的时区 ID 之一。
  • 是的,UTC 也可以被认为是一个时区,但这更多是为了方便计算。全年实际遵循 UTC 的真实地方仍然有自己独立的时区 - 例如:"Atlantic/Reykjavik"
  • @leonbloy - 另外,(很抱歉,我很迂腐)说 GMT 等同于 UTC+00:00 会更正确,而不是相反。另见UTC vs GMT。但感谢您将 UTC 称为伪时区。
  • 为了使术语讨论更加复杂,一些操作系统在时区控制面板中提供“UTC”或“GMT”作为设置选项。确实,发布此问题的人似乎就是这种情况。这就是我从语句this line returns - UTC 中推断出来的,JVM(计算机)的默认时区是这样设置的。
【解决方案2】:
//date1 - todays date in UTC format
boolean dstInit = timeZone.inDaylightTime(date1);

如果date1 是一个java Date 对象,那么注释是错误的。 Java Datelong 上的哑包装,它仅表示“物理”时间中的一个瞬间点,它不存储时区(也不存储民用日期字段),并且它没有“格式”。

因此,上面的行只是说明那个瞬间,在那个时区(UTC)是否对应于夏令时。当然,它总是会返回 false,因为 UTC(伪)时区没有 DST。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2016-02-06
    • 2018-03-04
    • 2011-09-03
    • 1970-01-01
    • 2016-06-18
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多