字符串日期转换(纳秒)

我已经为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 timezoneUTC,不走运。

我注意到的另一件事:如果这样做,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:一年中的月份(八月)
  • 2012:年(2012)
  • 05:一天中的时间(凌晨5点)
  • 35:小时(:35)
  • 19:分钟(:19)
  • 7600000:毫秒(7,600,000)

现在,VM看到这种情况的方式是,您将一天中的时间声明为5:35:19 am,然后向其添加7,600,000毫秒。7,600,000毫秒= 7,600秒=

2小时6分钟40秒。5:35:19 am + 02:06:40 = 7:41:59

am(0毫秒)。这就是您得到的结果。(似乎您没有正确设置时区,因此GMT字符串比您的结果晚3小时。)

如果您想保留:7600000,据我所知这是不可能的。由于可以将其简化为几秒钟,因此VM将自动将其缩减为其他时间增量。毫秒(SSSS)应用于存储<1000的值。

我建议您SimpleDateFormat为输出创建一个新的。但请记住,毫秒将被其他时间吸收(因为它们都作为一个对象存储longDate对象中)。

以上是 字符串日期转换(纳秒) 的全部内容, 来源链接: utcz.com/qa/428852.html

回到顶部