- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这段 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 的时区
设置为 UTC
,但没有成功。
我注意到的另一件事:如果我执行 df.setLenient(false);
它给我: java.text.ParseException: Unparseable date: "17.08.2012 05:35:19:7600000"
。
如果有人能给我一些解释/示例代码,我将不胜感激。提前致谢
最佳答案
你得到的结果是绝对正确的。
让我们分析一下:
17.08.2012 05:35:19:7600000
现在,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
对象中)。
关于java - 以纳秒为单位的字符串-日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12000673/
根据这个问题:Fractional power of units of measures in F# F# 中的度量单位不支持分数幂。 在我的应用程序中,有时考虑带有度量前缀的数据是有益的,例如当处理
我是一名优秀的程序员,十分优秀!