我的项目需要帮助。
我的用户数据库与此对象的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"
关闭答案 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 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));