java - 在JAVA中从GMT时间长获取区域设置日期时间字符串

标签 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关闭”

最佳答案

这正是您需要做的。但我希望您意识到存储 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_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));

关于java - 在JAVA中从GMT时间长获取区域设置日期时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185992/

相关文章:

java - Spring boot 找不到 PropertySource : label not found

java - 如何打乱字符串数组

python - 当值在 24 小时内至少一次超过阈值时,计算每小时数据的 pandas 数据框中每年的天数

python - 如何在Python中计算新时区?

java - 摆脱 jfreechart chartpanel 不必要的空间

java - doFilter() 是在 Servlet 工作完成之前还是之后执行?

ruby-on-rails - Rails 和 Mysql 的毫秒数

javascript - 如何使用 moment.js 从我的日期中删除年份?

ios - 在 Swift 中将日期从 GMT+1 转换为 UTC 时出现混淆

ios - 将 GMT 时间对象转换为本地时间 iOS