我一直在为 Android 应用程序的这段代码苦苦挣扎,但我无法掌握它。我已经阅读并尝试了在 stackoverflow 和其他地方找到的所有解决方案,但仍然没有成功。
我想要做的是有一个函数将像 "17.08.2012 05:35:19:7600000"
这样的字符串转换为 UTC 日期,还有一个函数接受 UTC date
并将其转换为这样的字符串。
String value = "17.08.2012 05:35:19:7600000";
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
try
{
Date today = df.parse(value);
System.out.println("Today = " + df.format(today) + " " + today.toGMTString());
}
catch (ParseException e)
{
e.printStackTrace();
}
这导致: Today = 17.08.2012 07:41:59:0000000 17 Aug 2012 04:41:59 GMT
这两个都是错误的。
我尝试将 SDF's timezone
设置为 UTC
,没有运气。
我注意到的另一件事:如果我这样做 df.setLenient(false);
它给了我: java.text.ParseException: Unparseable date: "17.08.2012 05:35:19:7600000"
。
如果有人可以向我提供一些解释/示例代码,我将不胜感激。提前致谢
原文由 Rhadoozooz 发布,翻译遵循 CC BY-SA 4.0 许可协议
你得到的结果是绝对正确的。
让我们分析一下:
现在,VM 看到这一点的方式是您将一天中的时间声明为凌晨 5:35:19,然后向其添加 7,600,000 毫秒。 7,600,000 毫秒 = 7,600 秒 = 2 小时 6 分 40 秒。 5:35:19am + 02:06:40 = 7:41:59am(和 0 毫秒)。这就是你得到的结果。 (看起来您没有正确设置时区,因此 GMT 字符串比您的结果晚 3 小时。)
如果你想保留
:7600000
,据我所知这是不可能的。由于这可以简化为秒,因此 VM 会自动将其缩减为其他时间增量。毫秒(SSSS
)应该用于存储 <1000 的值。我建议您为输出创建一个新的
SimpleDateFormat
;但请记住,毫秒将被吸收到其他时间(因为它们都存储为单个long
在Date
对象中)。