我正在努力将一个大的15位数字字符串转换为日期格式。
示例代码: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"one_answers"-8000"这样的偏移量,而不是单个数字。此外,要用时区表示日期时间,应该使用
ZonedDateTime
或OffsetDateTime
类,而不是LocalDateTime
类
我不确定你的示例字符串中的'3'应该代表哪个时区,如果它确实应该代表一个区域偏移量。如果您无法控制数据集的格式,则必须去掉最后一位数字并单独处理。
<>之前字符串dateInString = "201410051252323";dateTimeString = dateInString。substring (0, 14);//"20141005125232"字符串zoneDigitString = datestring .substring(14);//"3"DateTimeFormatter formatter = DateTimeFormatter. ofpattern ("yyyyMMddHHmmss");//没有"Z"LocalDateTime = LocalDateTime。解析(dateTimeString格式化程序);/*手动转换zoneDigitString到ZoneId这里*/ZoneId zone =…;ZonedDateTime = dateTime.atZone(zone);之前你必须自己处理"…"部分,这取决于"3"代表什么。