当前位置: 首页 > 面试题库 >

字符串日期转换(纳秒)

庄元龙
2023-03-14
问题内容

我已经为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对象中)。



 类似资料:
  • 问题内容: 我有以下格式的日期字符串: 我需要将其更改为以下内容: 以前,我一直使用此库-> SwiftDate来操作日期,但现在不起作用。 我也尝试过类似的东西: 但这不起作用。我能怎么做? 提前致谢。 问题答案: 具有小数秒和时区的标准ISO8601日期格式为 yyyy-MM-dd’T’HH:mm:ss.SSSZ 斯威夫特3: 在macOS 10.13+中,iOS 11+ 是输入格式化程序的替

  • 问题 你的应用程序接受字符串格式的输入,但是你想将它们转换为 datetime 对象以便在上面执行非字符串操作。 解决方案 使用Python的标准模块 datetime 可以很容易的解决这个问题。比如: >>> from datetime import datetime >>> text = '2012-09-20' >>> y = datetime.strptime(text, '%Y-%m-%

  • 问题内容: 我已经写了这个功能: 当我通过日期以及获取输出日期作为 我要去哪里的时候?还做什么,如果我想只得到和 任何帮助表示赞赏 问题答案: 找到以下解决方案…。发布它,因为它也可以帮助其他人:) 输出: 2014-04-24T11:15:00.000 + 02:00

  • 问题内容: 是否可以将“ 20110210”转换为2011-02-10? 我试过,我得到 我究竟做错了什么? 我有新的SimpleDateFormat(“ yyyy-MM-dd”)而不是新的SimpleDateFormat(“ yyyyMMdd”) 问题答案: 这对我有用,不会引发异常:

  • 我有一个日期的字符串格式,但它来自csv文件:20200520T0200,假设它的格式为(yyyyMMdd/T/24小时格式)。 我已经设法读取了csv文件中的行,并将其分离到数组缓冲区中。 我的问题是我不能将字符串格式化成日期,因为我需要使用日期来计算一些值。因为我将使用这个格式化程序来格式化我的arraybuffer的第一个元素的所有值,这是带有字符串“20200406T0300,等等,等等”

  • 我正在尝试转换一个表示存储在SQLite中的日期的字符串。 日期存储到sqlite中,如下所示: 根据Java文档,方法: 返回此日期的字符串表示形式。格式设置相当于使用具有格式字符串“eee MMM dd hh:mm:ss zzz yyyy”的SimpleDateFormat,看起来类似于“tue Jun 22 13:07:00 PDT 1999”。则使用当前默认时区和区域设置。如果需要控制时区