我的项目需要帮助。
我的用户数据库与 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关闭”
最佳答案
这正是您需要做的。但我希望您意识到存储 offset-from-UTC ,而不是 time zone ID ,意味着每个用户将被“卡在”标准时间。也就是说,偏移量为 -8 的用户,正如您所说,处于 PST 状态,尽管在 4 月 1 日,他们应该处于 PDT 状态,即 -7 小时来自 UTC。
因此,这是使用固定偏移量并假设 millis
是您的“GMT 时间长”的答案。此代码使用 java.time Java 8 及更高版本中内置的框架(请参阅 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));
关于java - 在JAVA中从GMT时间长获取区域设置日期时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185992/