java - Android:时间和时区问题
问题描述
我从 UTC 的服务器获取有关某些事件的时间数据。例如,它应该在 5 小时内发生。
但是当用户更改设备的时间(例如 +2 小时)时,事件前的时间变为 3 小时(而不是 5 小时)
但是,如果用户更改的不是时间而是时区,那么一切正常。然后我决定检查时区偏移量。即使我将时间更改为 +2 小时,系统仍然认为我在我的时区时间。
我在时间更改前后有相同的时区偏移。
那么该如何处理呢?
我希望如果用户更改时间 +2 小时,那么仍然要在事件发生前显示这 5 小时,而不是 3 小时。
我Calendar.getInstance().time.time
用来检查我的时间。
碰巧系统时间是 15:00,事件将在 20:00,用户将时间更改为 19:00,应用程序显示该事件将在一小时内。
解决方案
如果您获得 UTC 时间,那么您可以将其与 UTC 时间进行比较(当然不会前后移动)。使用java.time
东西更容易。
例如:
Instant fromServer = serverTime.toInstant(ZoneOffset.UTC);
Instant now = Instant.now();
long diff = now.until(fromServer, ChronoUnit.HOURS);
推荐阅读
- javascript - 动态显示选中复选框值列表 js/jquery
- java - 私有静态内部类 - Powermock
- wordpress - Wordpress 在首页突出显示最近的帖子
- xml - 将 Bitmap 实现为 base64 序列化器
- android - 单击 recyclerView 中的项目以更改其颜色时的错误行为?
- r - 编辑时抛出 RStudio 错误?
- python - 两个列表计算特定元素并根据特定规则聚合
- apache-spark - Where to set "spark.yarn.executor.memoryOverhead"
- tailwind-css - purgecss CLI -c 找不到模块 purgecss.config.js
- android - 在 Android 中使用 Glide 和 Kotlin 在 ScrollView / RecyclerView 中显示 n 个图像