从JAVA中的GMT时间长度获取区域设置日期时间字符串

时间:2016-03-23 18:27:07

标签: java datetime gmt

我的项目需要帮助。

我的用户数据库与此对象的GMT有时间偏移 {userid:" XTGTS12",timezoneoffset:-8}格式为GMT / UTC -8:00,即PST语言环境。 不同时区的每个用户都在世界各地。

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

关闭

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

我不确定如何在Java中实现。

如果管理员通过我GMT时间长,即2016-04-01 00:00:00

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

关闭

1 个答案:

答案 0 :(得分: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 zoneAmerica/Los_AngelesPST8PDT相关联,那么您应该这样做:

    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));