首页 > 解决方案 > Android:时间和时区问题

问题描述

我从 UTC 的服务器获取有关某些事件的时间数据。例如,它应该在 5 小时内发生。

但是当用户更改设备的时间(例如 +2 小时)时,事件前的时间变为 3 小时(而不是 5 小时)

但是,如果用户更改的不是时间而是时区,那么一切正常。然后我决定检查时区偏移量。即使我将时间更改为 +2 小时,系统仍然认为我在我的时区时间。

我在时间更改前后有相同的时区偏移。

那么该如何处理呢?

我希望如果用户更改时间 +2 小时,那么仍然要在事件发生前显示这 5 小时,而不是 3 小时。

Calendar.getInstance().time.time用来检查我的时间。

碰巧系统时间是 15:00,事件将在 20:00,用户将时间更改为 19:00,应用程序显示该事件将在一小时内。

标签: javaandroidkotlincalendar

解决方案


如果您获得 UTC 时间,那么您可以将其与 UTC 时间进行比较(当然不会前后移动)。使用java.time东西更容易。

例如:

 Instant fromServer = serverTime.toInstant(ZoneOffset.UTC);
 Instant now = Instant.now();
 long diff = now.until(fromServer, ChronoUnit.HOURS);

推荐阅读