gpt4 book ai didi

java - 以纳秒为单位的字符串-日期转换

转载 作者:太空狗 更新时间:2023-10-29 23:02:16 25 4
gpt4 key购买 nike

这段 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
  • 17:一个月中的第几天(17 日)
  • 08:一年中的月份(8 月)
  • 2012:年 (2012)
  • 05:一天中的时间(早上 5 点)
  • 35:小时中的分钟 (:35)
  • 19: 秒 (:19)
  • 7600000:毫秒秒 (7,600,000)

现在,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com