gpt4 book ai didi

java - 如何处理服务器中数据的时区差异,尤其是物联网平台

转载 作者:行者123 更新时间:2023-11-30 02:30:36 24 4
gpt4 key购买 nike

我正在寻找解决方案,如何处理具有特定时间相关数据的数据。

项目架构:后端是用 Java 构建的 RESTful 服务。

前端是:1.Angular JS(仅适用于网络)2. 原生移动应用程序(Android、iPhone)。

For eg. one device is in UK (i.e. UTC+1:00) time zone another device is in HKT (Hong Kong i.e. UTC+8:00) timezone.

My server is in Germany (i.e. UTC +2:30) timezone.

我应该在服务器上保留什么?

如何显示每个设备(网络浏览器以及移动设备)的当前时间,以及如果我提供可以从任何地方访问的网页,我应该保留哪个时区值?

当前解决方案:目前,每当数据到达服务器时,我都会保留计算 UTC 纪元时间并存储它,通过 REST 发送时间,然后在客户端(网络浏览器或 Android 设备)将其转换为本地时区。

这种方法正确吗?

最佳答案

是的,你的方法看起来很好而且正确。

对于您的实现:如果您使用 Java 8,请考虑使用 new java.time API 。更容易,less bugged and less error-prone than the old APIs .

如果您使用的是 Java <= 7,则可以使用 ThreeTen Backport ,Java 8 新日期/时间类的一个很好的向后移植。对于 Android,有 ThreeTenABP (更多关于如何使用它 here )。

下面的代码适用于两者。唯一的区别是包名称(在 Java 8 中是 java.time,在 ThreeTen Backport 中是 org. Threeten.bp),但是类和方法名称不同是一样的。

要获取 UTC 时间,您可以使用 Instant 类。这是最好的选择,因为它始终采用 UTC,并且可以轻松地与其他时区相互转换:

// get current UTC time - Instant is always in UTC
Instant instant = Instant.now();

// you can use the string representation
System.out.println(instant.toString());// 2017-06-06T11:57:21.665Z
// or the timestamp (epoch millis - milliseconds from 1970-01-01T00:00:00Z)
System.out.println(instant.toEpochMilli());// 1496750241665

// convert to another timezone (always use valid IDs)
ZonedDateTime z = instant.atZone(ZoneId.of("America/Sao_Paulo"));
System.out.println(z);// 2017-06-06T08:57:21.665-03:00[America/Sao_Paulo]

// in another timezone
z = instant.atZone(ZoneId.of("Europe/Berlin"));
System.out.println(z);// 2017-06-06T13:57:21.665+02:00[Europe/Berlin]

// convert back to UTC Instant
System.out.println(z.toInstant()); // 2017-06-06T11:57:21.665Z

API 使用 IANA timezones names (始终采用Continent/City 格式,例如America/Sao_PauloEurope/Berlin)。避免使用 3 个字母的缩写(例如 CSTPST),因为它们是 ambiguous and not standard 。您可以使用 ZoneId.getAvailableZoneIds() 获取所有时区名称的完整列表。

您还可以使用ZoneId.systemDefault()获取系统的默认时区。在这种情况下,如果代码在服务器上运行,它将使用服务器的计算机时区。如果它在设备中运行,它将使用设备中配置的任何内容。

关于java - 如何处理服务器中数据的时区差异,尤其是物联网平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com