【问题标题】:Get locale Date Time String from GMT time long in JAVA在 JAVA 中从 GMT 时间长获取语言环境日期时间字符串
【发布时间】:2016-07-11 04:56:07
【问题描述】:

我的项目需要帮助。

我的用户数据库与 GMT 有时间偏移,就像这个对象一样 {userid:"XTGTS12",timezoneoffset:-8} GMT/UTC -8:00,这是 PST 语言环境。 每个用户在世界各地的不同 timezoneOffset。

我需要向用户发送推送通知,告诉他们服务器停机时间,例如: "服务器将在 {0} 关闭"

管理员向我传递了一个很长的 GMT 时间,我需要根据 timezoneoffset 整数拉取所有用户对象,以在本地时间为用户生成日期和时间以及整个字符串。

我不知道如何在 Java 中实现。

如果管理员给我一个 GMT 时间长,即 2016-04-01 00:00:00

我应该在 timezoneOffset -8 发送给用户的最后一个字符串是 "服务器将于 2016-03-31 16:00:00 关闭"

【问题讨论】:

  • 在SimpleDateFormat 中有方法.setTimeZone() 和TimeZone.getTimeZone()--这些将帮助您在特定时区格式化时间戳。
  • 我认为最好的方法是在客户端(可能在 javascript 中)处理本地时间,而在服务器端只处理 GMT。
  • 顺便说一句,对于那种重要的信息,我会附加偏移量(或时区名称),以明确您显示的是调整到特定地区的时间。

标签: java datetime gmt


【解决方案1】:

这正是您需要做的。但我希望您意识到存储offset-from-UTC,而不是time zone ID,意味着每个用户都将在标准时间“卡住”。也就是说,正如您所说,偏移量为 -8 的用户处于 PST,即使在 4 月 1 日,他们应该处于 PDT 或 -7 小时来自 UTC。

所以这是一个使用固定偏移量并假设millis 是您的“GMT 时间长”的答案。此代码使用 Java 8 及更高版本中内置的java.time 框架(请参阅Tutorial)。

    Instant inst = Instant.ofEpochMilli(millis);
    OffsetDateTime odt = inst.atOffset(ZoneOffset.ofHours(-8));
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(f.format(odt));

现在,如果您意识到您确实希望将用户与 time zone 关联,例如 America/Los_Angeles 或 PST8PDT,您应该这样做:

    Instant inst = Instant.ofEpochMilli(millis);
    ZonedDateTime zdt = inst.atZone(ZoneId.of("PST8PDT"));
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(f.format(zdt));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2012-06-04
    • 2013-04-01
    相关资源
    最近更新 更多