如何将“以下字符串”20190911T14:37:08.7770400”解析为日期格式

我正在尝试将字符串解析为简单的日期格式,但无法解析日期异常。有人可以尝试帮助我解决这个问题吗?


  String dateFormatter ="20190911T14:37:08.7770400";

  SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD'T'HH:mm:ss.SSSZZZZ");

  //tried the below commnet also

  //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-d'T'HH:mm:ss.SSSZZZZ");

  System.out.println(sdf.parse(dateFormatter));



 Error: 

       "Exception in thread "main" java.text.ParseException: Unparseable 

       date: "20190911T14:37:08.7770400" at 

       java.text.DateFormat.parse(DateFormat.java:366) at 

      com.sudha.test.sample_boot_example.TestString.main(TestString.java:20)


人到中年有点甜
浏览 83回答 3
3回答

陪伴而非守候

格式的时区部分需要一个前导 + 或 - 字符。因此,您提供的字符串失败了。如果您尝试使用“20190911T14:37:08.777 + 0400”,它会起作用。我没有看到任何可与没有符号的 4 位时区偏移一起使用的选项。 

茅侃侃

使用正确的格式代码。输入意味着微秒范围内的小数秒?如果最后的数字代表秒的一小部分,则此代码有效。用七位数字来表示秒的小数部分是不寻常的;3(3、6 或 9)的增量更为常见。但我们可以让它发挥作用。String input = "20190911T14:37:08.7770400" ;DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMdd'T'HH:mm:ss.SSSSSSS" ) ; LocalDateTime ldt = LocalDateTime.parse( input , f ) ;ldt.toString(): 2019-09-11T14:37:08.777040输入意味着偏移?输入错误。如果最后的数字是以毫秒为单位的小数秒和与 UTC 的偏移量(小时数和分钟数)的四位数字的组合,那么您的输入就有错误。偏移量要么早于 UTC,要么晚于 UTC。因此偏移量必须包含加号+或减号-。您的输入两者都没有,因此无法解析此类字符串的相对 UTC 偏移量。ISO 8601输入字符串的格式很糟糕,显然是对标准ISO 8601格式的笨拙修改。例如:2013-04-03T17:04:39.9437823+04:00. 我强烈建议您对这些数据的发布者进行有关 ISO 8601 标准的教育。不要发明新格式,坚持标准。java.time类在解析/生成字符串时默认使用ISO 8601格式。因此,根本不需要指定格式模式!另一件事:如果您尝试跟踪时间轴上的时刻、实际点,那么您必须在输入中包含偏移量或时区。如果没有这种背景,我们不知道输入是否意味着日本东京的下午 2 点或美国俄亥俄州托莱多的下午 2 点——两个截然不同的时刻,相隔几个小时。

ITMISS

String dateFormatter ="20190911T14:37:08.777+0400";        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss.SSSZZZZ");        try {            System.out.println(sdf.parse(dateFormatter));        } catch (Exception ex) {            System.out.println(ex);        }添加 + 应该可以,并检查它是“yyyyMMdd”而不是“YYYYMMDD”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java