java - Android:时间和时区问题

标签 java android kotlin calendar

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

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

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

时间更改前后的时区偏移量相同。

那该怎么处理呢?

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

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

碰巧系统时间是 15:00, Activity 将在 20:00,用户将时间更改为 19:00,应用程序显示 Activity 将在一小时后进行。

最佳答案

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

例如:

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

关于java - Android:时间和时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076807/

相关文章:

java - 持久化实体时出现 NullPointerException

java - JTextArea 的高亮行

AndroidNetworking 在 Kotlin 中的 suspendCoroutine 中永远不会返回

java - 从 Java Swing GUI 文本区域运行 ANTLR 语法

Java watchservice,如何找到创建文件的目录?

java - 在 Android 上为 Mandelbrot 集着色时出现问题

Java控制垃圾收集器

java - 使用 Retrofit2 将文件上传到 AWS S3 预签名 URL

kotlin - 如何在Kotlin中串联字符串?

javascript - 如何在没有 'new' 关键字的情况下将 JS 代码转换为 Kotlin