如何处理服务器和本机 Android 应用程序之间的时区差异?

2024-01-02

假设我的服务器位于美国,而我住在俄罗斯。我们知道他们有不同的时区。

我的应用程序获取文本(String)来自服务器。这个文本数据有Date数据库中的列用于保留记录日期。

当我获取数据时,我也得到date知识。这样我就可以按时间对它们进行分组。第一个在顶部,最后一个在底部。任何...

我编写了一个函数来显示更易于人类阅读的日期值,例如“13 小时”、“9 分钟”。服务器向我发送服务器(美国)时区的日期。

当我用俄罗斯时区计算应用程序的时间时(因为它是应用程序的当前时区),它计算错误。所以,这不是任何人想要的东西。

我应该怎么做才能实现正确的计算?

注解:该应用程序将由不同国家的公民使用。所以我不能使计算静态。


实际上并不存在“俄罗斯时区”或“美国时区”之类的东西。这两个国家都有几个不同的时区。请参阅维基百科文章俄罗斯时间 https://en.wikipedia.org/wiki/Time_in_Russia and 美国时间 https://en.wikipedia.org/wiki/Time_in_the_United_States.

您应该始终编写服务器代码,使其不依赖于服务器运行所在的时区。通常这是通过将所有时间存储为来完成的UTC https://en.wikipedia.org/wiki/Coordinated_Universal_Time。由于客户端是 Android 设备,只需在客户端上转换为本地时间或从本地时间转换为本地时间,仅向服务器发送 UTC 或从服务器发送 UTC。

如果您使用 Java,您可能应该使用乔达时间 http://www.joda.org/joda-time/为了您的转化。它比Calendar class.

Update

正如 Basil 在评论中指出的那样,Joda-Time 项目现在处于维护模式。该团队建议迁移到java.time类定义为JSR 310 https://jcp.org/en/jsr/detail?id=310。对于早期的 Android,请参阅三十后端口 http://www.threeten.org/threetenbp/ and 三十ABP https://github.com/JakeWharton/ThreeTenABP项目。看如何使用… https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理服务器和本机 Android 应用程序之间的时区差异? 的相关文章

随机推荐

  • 如何使InnoDB表在服务器重启时不重置自动增量?

    我的开发机器上运行的是 MySQL 5 5 37 我使用 innodb 表 面临下一个问题 服务器重新启动后自动增量重置 Found 自动锁模式 http dev mysql com doc refman 5 1 en innodb par
  • Twitter Open Graph 图像未显示

    我正在尝试在网站中实现 OpenGraph 这是我的元数据代码
  • Laravel 方法分页不存在

    我正在尝试对模型结果进行分页 但收到 分页方法不存在 这是我的代码 user dispatches Dispatch all gt where user id Auth id gt paginate 10 我需要获取用户 ID 等于当前经过
  • 我可以在 Three.js 中隐藏网格的面吗?

    我想使网格的某些部分在运行时不可见 我可以将这些部分设置为不可见 透明吗 通过改变单个面孔的属性 网格本身仅使用一种材料 示例说明 as the editor理解这个问题 想象一个网格 这里有 20 个顶点的几何图形 其中每个四个顶点的四边
  • DSPack - 如何获取声音输出的默认设备?

    在 Windows 7 中 有多个播放设备 示例 在我的笔记本电脑上 扬声器和双耳机 独立双耳机 SPDIF 通过 HP Dock 进行数字输出 情况是这样的 我正在编写一个应用程序 让用户选择输出设备并将其保存到应用程序的设置中 因此 它
  • Java 相当于 Cocoa 委托/Objective-C 非正式协议?

    Java 中 Cocoa 委托的等价物是什么 我知道我可以将一个接口传递给一个类 并让该类调用适当的方法 但我想知道是否有其他方法可以实现更接近 Cocoa Objective C 的非正式协议的东西 简而言之 Java 中没有任何东西能像
  • 如何在 Visual Studio 2013 中创建数据库项目

    我正在将包含一些 C 项目的解决方案从 Visual Studio 2008 迁移到 VS2013 迁移进行得很顺利 进行了一些调整 但是还有一个 dbp 项目 数据库项目 来自 VS2008 它拒绝在 VS2013 中迁移 加载 我在这个
  • 为什么通过 newCachedThreadPool 创建的 ExecutorService 是邪恶的?

    保罗 泰玛推介会 http paultyma blogspot com 2008 03 writing java multithreaded servers html有这一行 Executors newCachedThreadPool万恶
  • 在 OpenCV 中查找轮廓的“fitLine”

    我是一个在流中查找轮廓的程序 例如 我想找到可以描述这个轮廓的 点集 就像红线一样 黄色部分是轮廓的矩 我尝试使用fitLineopencv 的函数 但结果是无意义的 任何想法如何获得轮廓的中线 这应该代表我的 Contours 的关键方面
  • 有没有一种方法可以为 sendfile 编写不直接使用系统调用指令的 shellcode?

    我正在处理一个类似 ctf 的挑战 它正在过滤我的 shellcode 以确保我没有分别具有 syscall sysenter 和 int 指令 0x0f05 0x0f34 和 0x80cd 的十六进制值编码 基本上我有一个可以打开文件的
  • 哈希码的理解

    哈希函数对于实现哈希表很重要 我知道在java中 对象有其哈希码 该哈希码可能是由弱哈希函数生成的 以下是 补充哈希函数 的一个片段 static int hash Object x int h x hashCode h h lt lt 9
  • 使用 Node.js 提供网页时如何摆脱 .html 扩展名?

    我是 Node js 的初学者 正在使用 Express 和 ejs 布局 我想知道如何在发布页面时摆脱 html 扩展名 例如 如果我转到我的 localhost 3000 about html 这可以工作 但我希望它显示为 about
  • 无需 ctrl+空格即可自动完成

    Every time I must use CTRL SPACE for get complete variants But I need it often I need list of variants every time when I
  • 在 iOS 中将项目添加到阅读列表

    是否可以从应用程序将项目 url 添加到 Safari 中的阅读列表 我环顾四周 但只能找到信息如何手动添加 http mac tutsplus com tutorials tips shortcuts quick tip how to u
  • MVC API 控制器的复杂对象未通过 jquery ajax 调用填充

    我正在尝试调用 POST API 控制器 控制器被调用 但复杂对象是空的 我已经运行了 Fiddler 该对象甚至已经填充在那里 我究竟做错了什么 我的 C 对象 createdUser已包含 Web Api 所需的正确格式的数据 无需将其
  • 为什么我们使用完 System.out Stream 后不关闭它呢?

    我只是想知道 我们通常会在最后关闭流 但为什么我们不关闭System out打印流与System out close 如果关闭它 您将无法再写入控制台 因此当进程终止时 让我们将此任务留给虚拟机 您应该只关闭您拥有或手动创建的流 Syste
  • 在 IntelliJ IDEA 中为 scala 项目附加源

    我有一个带有 Scala 的 Playframework 2 项目 非常小的一个 它用斯卡拉异常 https github com playframework Play20 wiki ScalaAnorm图书馆 我有这样的代码 packag
  • 从 JSON 到 Avro 的 Kafka 流

    我尝试使用 Kafka Stream 将带有 String JSON 消息的主题转换为另一个主题 作为 Avro 消息 流主要方法 streamsConfiguration put StreamsConfig KEY SERDE CLASS
  • 查找关联计数大于零的所有记录

    我正在尝试做一些我认为很简单但似乎并不简单的事情 我有一个项目模型 有很多空缺 class Project lt ActiveRecord Base has many vacancies dependent gt destroy end 我
  • 如何处理服务器和本机 Android 应用程序之间的时区差异?

    假设我的服务器位于美国 而我住在俄罗斯 我们知道他们有不同的时区 我的应用程序获取文本 String 来自服务器 这个文本数据有Date数据库中的列用于保留记录日期 当我获取数据时 我也得到date知识 这样我就可以按时间对它们进行分组 第