【问题标题】:How do I get the current time in a different TimeZone in Java?如何在 Java 中的不同时区中获取当前时间?
【发布时间】:2009-11-26 10:05:34
【问题描述】:

好的 - 问这样一个基本问题我觉得很愚蠢,但是嘿。

我正在尝试在 Java webapp 中获取不同时区的当前时间。我尝试了以下明显的解决方案:在我的 servlet 中,

Calendar localCalendar = Calendar.getInstance(myBean.getTimeZone());

然后我将日历对象作为请求属性“localCalendar”传递给 JSP:

It is now: [${requestScope.localCalendar.time}]
in TimeZone ${requestScope.localCalendar.timeZone.ID}

但我的输出似乎忽略了时区集,即

It is now: [Thu Nov 26 10:01:03 GMT 2009] in TimeZone Indian/Mahe

我猜这与区域设置有关,有什么方法可以在另一个时区为我的区域设置格式化时间?

【问题讨论】:

    标签: java jsp servlets timezone locale


    【解决方案1】:

    Calendar的内部数据基本是:

    时间的瞬间可以用毫秒值表示,该值与 1970 年 1 月 1 日 00:00:00.000 GMT(格里高利)纪元的偏移量。

    因此,它拥有一个long,无论您对其使用什么操作,它都是相同的,而toString 不做任何承诺。

    您想根据地区和时区格式化日期。您可以在表示层(JSP)中使用 JSTL 之类的东西来执行此操作,或者您可以使用 DateFormat 在 bean 中格式化日期并将值作为字符串返回。

    【讨论】:

    • 完美 - JSTL 格式化标签确实包含一个带有时区属性的 formatDate。我只是不认为时区是一种格式化的东西......但是,它有效。谢谢!
    【解决方案2】:

    如果您想以给定的格式/时区显示日期,请使用SimpleDateFormat

    【讨论】:

    • 仅供参考:这个类在几年前被 java.time 类所取代,并采用了 JSR 310。
    【解决方案3】:

    answer by McDowell 是正确的,但 java.util.Calendar(和 java.util.Date)类已经过时了。

    java.time

    java.time 框架内置于 Java 8 及更高版本,并向后移植到 Java 6 和 7 以及 Android。这些新类取代了旧的日期时间类,因为它们已被证明设计不佳、令人困惑且麻烦。

    Instant 是 UTC 中的当前时刻。

    Instant now = Instant.now();
    

    应用时区ZoneId 以获得ZonedDateTime

    ZoneId zoneId = ZoneId.of( "America/Montreal" );
    ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
    

    时区与区域设置

    请注意,time zoneLocale 是正交问题。时区影响wall clock timeoffset from UTCLocale 仅影响演示文稿。区域设置用于 (a) 人类语言作为日期和月份的名称,以及 (b) 文化规范有关诸如月份前日期、逗号与句点等问题的文化规范。

    例如,您可能有一个阅读法语的Québécois 用户在使用India 工作时访问您的页面。所以使用Asia/Kolkata 的时区和Locale.CANADA_FRENCH

    要生成格式化字符串,请使用DateTimeFormatter 类。 Stack Overflow 中已经存在许多示例。通过withLocale 方法指定所需/预期的Locale

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 2018-09-08
      相关资源
      最近更新 更多