【问题标题】:Get Time in London在伦敦获得时间
【发布时间】:2011-02-02 04:08:18
【问题描述】:

如何获取伦敦当前的本地挂钟时间(自 1970 年 1 月 1 日以来的毫秒数)?由于我的应用程序可以在任何位置的服务器上运行,我想我需要使用“欧洲/伦敦”的时区。我还需要考虑夏令时,即应用程序应在“夏季”期间增加一个小时。

我更喜欢使用标准的 java.util 库。

这对吗?

TimeZone tz = TimeZone.getTimeZone("Europe/London") ;
Calendar cal = Calendar.getInstance(tz);
return cal.getTime().getTime() + tz.getDSTSavings();

谢谢

【问题讨论】:

  • 如果您正在编写服务器,常见的范例总是在内部使用 UTC 时间,然后在 UI 中显示时使用 DateFormatter 对其进行格式化。
  • @Kylar:仅使用 UTC 并不特定于服务器应用程序,但应该由几乎所有应用程序来完成。
  • 我不会假设知道那里的所有应用程序;)
  • 我不知道伦敦人使用显示 Unix 时间戳的挂钟。
  • 致电 +44 871 789 3642。他们会告诉你的。 (en.wikipedia.org/wiki/Speaking_clock#United_Kingdom)

标签: java datetime calendar dst


【解决方案1】:

我不确定这个数量代表什么,因为“自 1970 年 1 月 1 日以来的毫秒数”不会因位置或夏令时而异。但是,也许这个计算对你有用:

TimeZone london = TimeZone.getTimeZone("Europe/London");
long now = System.currentTimeMillis();
return now + london.getOffset(now);

使用 UTC 时间或本地时间可以更好地为大多数应用程序提供服务;这两者都不是。您可以像这样获取特定区域的 UTC 时间和时间:

Instant now = Instant.now(); /* UTC time */
ZonedDateTime local = now.atZone(ZoneId.of("Europe/London"));

【讨论】:

    【解决方案2】:

    其他人说这样做可能不是一个好主意 - 我相信这取决于您的情况,但使用 UTC 肯定是值得考虑的事情。

    但是,我认为您在这里遗漏了一些东西:自 1970 年 1 月 1 日 UTC 以来发生的秒数(这是 Unix 纪元的定义方式 - 实际上与在伦敦,因为该日期的偏移量为 0) 可以通过以下任何表达式获得:

    System.currentTimeMillis()
    new Date().getTime()
    Calendar.getInstance().getTime().getTime()
    

    如果您考虑一下,自特定瞬间以来的毫秒数不会根据您所在的时区而改变。

    哦,还有正常的建议 - 要获得更好的日期和时间 API,请参阅 Joda Time

    【讨论】:

    • 英国不也使用夏令时吗?在这种情况下,它实际上与 UTC 不同。
    • @Johannes Rössel:DST 与否,自纪元以来经过的(毫秒)秒数与夏令时无关。如果是下午 6 点或 7 点,NOT 会改变自纪元以来经过的(毫秒)秒数。分钟不是固定单位(你可以有 59 或 61 秒分钟),天不是固定单位(你可以有 23 或 25 小时一天),但秒和毫秒是固定单位。这正是您总是应该以(毫秒)秒为单位测量时间并以(毫秒)秒为单位存储自纪元以来的日期/时间的原因。并且仅在向最终用户显示它们时进行转换。
    【解决方案3】:

    要获取伦敦的当前时间:

    SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    f.setTimeZone(TimeZone.getTimeZone("Europe/London"));
    System.out.println(f.format(GregorianCalendar.getInstance().getTime()));
    

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多