将15位数字字符串转换为java8时间戳

问题描述:

我在努力将大15位数字字符串转换为日期格式。将15位数字字符串转换为java8时间戳

示例代码:

String dateInString = "201410051252323"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ"); 
LocalDateTime dateTime = LocalDateTime.parse(dateInString, formatter); 

我得到以下异常

java.time.format.DateTimeParseException: Text '2014100591523' could not be parsed at index 0 

任何人都可以请建议在Java中8

做到这一点的最好办法你有正确的想法,但是您的代码有两个问题 - 一个语法,另一个逻辑:

  • 您的模式预计将用连字符和冒号和空格格式化字符串。例如,“yyyy-MM-dd”将匹配“2014-10-05”,但不匹配“20141005”。要匹配后者,只需放下连字符并使用“yyyyMMdd”即可。
  • 在模式中使用'Z'作为最后一位数字,表示您希望字符串中的时区偏移。但'Z'模式匹配偏移如“+0000”和“-8000”,而不是一个数字。此外,为了表示与时区的日期时间,你应该使用ZonedDateTimeOffsetDateTime类,而不是LocalDateTime

我不知道哪个时区在您的示例字符串中的“3”是要象征,如果它确实应该表示一个区域偏移量。如果您无法控制数据集的格式,则必须剥离最后一位数字并分开处理。

 

    String dateInString = "201410051252323"; 
    String dateTimeString = dateInString.substring(0, 14); // "20141005125232" 
    String zoneDigitString = dateInString.substring(14); // "3" 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); // no "Z" 
    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter); 

    /* Manually convert zoneDigitString to a ZoneId here */ 
    ZoneId zone = ...; 

    ZonedDateTime zonedDateTime = dateTime.atZone(zone); 

根据“3”代表的情况,您必须自行处理“...”部分。

+0

谢谢你。真的有用:) – Sushma