将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”,而不是一个数字。此外,为了表示与时区的日期时间,你应该使用
ZonedDateTime
或OffsetDateTime
类,而不是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”代表的情况,您必须自行处理“...”部分。
谢谢你。真的有用:) – Sushma