ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 具有纳秒的字符串日期转换

2019-09-23 19:12:38  阅读:842  来源: 互联网

标签:date-parsing android java simpledateformat datetime-format


我已经用这段代码为Android应用程序挣扎了一段时间,我无法理解它.我已经阅读并尝试了我在stackoverflow和其他地方找到的每个解决方案,但仍然没有运气.

我想要做的是有一个函数将像“17.08.2012 05:35:19:7600000”这样的字符串转换为UTC日期和一个接受UTC日期并将其转换为类似字符串的函数.

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();
}

结果如下:今天= 17.08.2012 07:41:59:0000000 2012年8月17日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:一年中的月份(八月)
> 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 02:06:40 = 7:41:59(和0毫秒).这是你得到的结果. (您似乎没有正确设置时区,因此GMT字符串比您的结果落后3小时.)

如果你想保留:7600000,据我所知这是不可能的.由于这可以简化为几秒钟,因此VM会自动将其减少到其他时间增量.毫秒(SSSS)应该用于存储值<1000. 我建议你为你的输出创建一个新的SimpleDateFormat;但要记住,毫秒将被吸收到其他时间(因为它们都被存储为Date对象中的一个long).

标签:date-parsing,android,java,simpledateformat,datetime-format
来源: https://codeday.me/bug/20190923/1815608.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有