Skip to main content
 首页 » 编程设计

java之Python 与 Java UTC

2025年05月04日24lidabo

我在开发基于时间的应用程序时遇到了一些问题,该应用程序在 Android 客户端使用 Java,在服务器端使用 Python。我在 Java 和 Python 报告的时间中遇到了 -3 小时的差异(这正是 Android 设备的时区),即使在双方我都以某种方式获得时间(根据 SO 和其他网站) ) 返回 UTC 时间。 在我的客户中,我正在使用

Date utcNow = new Date() 

在服务器中,我使用

datetime.datetime.now() 

然而,当同时运行时,它们会产生 2013-09-09 11:52:16 和 2013-09-09 14:52:16,分别。我怀疑问题出在 Java 方面,因为在服务器中运行 date 返回与 Python 相同的值(显然),时区为 UTC,而 Android 设备中的相同命令返回 BRT(GMT -3) 时间。

在搜索两种语言的时区调整时,所有答案都声称上述方法将返回 UTC 日期,但这种差异是显而易见的。

如何将 Android 设备的时间转换为 UTC?

现在我正在使用一个非常丑陋(并且极度不推荐使用)的解决方案:utcNow.setHours(utcNoe.getHours()+3)

编辑:旁注:从 Jon 的回答中,我注意到 Java 的 Date 对象等同于 Python 的原始 datetime 对象。

请您参考如下方法:

我强烈怀疑问题出在您未向我们展示的代码中 - 当您转换 Date 时到 String在 Java 中通过 SimpleDateFormat .

A Date本身只是一个瞬间,没有与之关联的时区或日历系统。为了将其转换为字符串,两者都需要应用 - 以及 SimpleDateFormat 中的默认时区是系统本地时区。

如果您只是将代码更改为:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
                                               Locale.US); 
format.setTimeZone(TimeZone.getTimeZone("UTC")); 
String dateText = format.format(date); 

然后我怀疑你的问题会消失。请注意,这不是 Date 的一部分信息本身。 (了解这一点非常重要。)

另请注意,Java 中的日期/时间 API 非常糟糕。如果你能使用Joda-Time相反,您可能会玩得更开心。 (如果您只需要一个时间戳,那就太过分了,但是如果您有任何实际的日期/时间工作要做,您绝对应该考虑一下。)