java - Python 与 Java UTC?

标签 java android python time utc

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

Date utcNow = new Date()

在服务器中,我使用

datetime.datetime.now()

然而,当同时运行时,它们会产生 2013-09-09 11:52:162013-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相反,您可能会玩得更开心。 (如果您只需要一个时间戳,那就太过分了,但是如果您有任何实际的日期/时间工作要做,您绝对应该考虑一下。)

关于java - Python 与 Java UTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701348/

相关文章:

java - Java ArrayList 迭代器中可能的内存泄漏

junit - 安卓 JUnit : Define a different Application subclass

android - android :actionMenuTextColor and actionMenuTextColor之间的区别

python - __add__ 两个类对象

python - Django 静态文件导致 404

Java toString - ToStringBuilder 不够;不会穿越

java - 如何在 DefaultMutableTreeNode (Java Swing) 中存储 CORBA 对象?

android - 由 : java. lang.SecurityException :android. permission.READ_PHONE_STATE 引起

python - 来自 df 的字典,键内有列

java - mysql 服务器时区和 jdbc 连接的问题