Java8解析给定字符串的日期或日期时间格式
发布时间:2020-12-15 04:32:42 所属栏目:Java 来源:网络整理
导读:我有一个文件可以具有日期修改值,具有日期或日期时间的格式.我曾经将值解析为: String t = "2012-01-05T21:21:52.834Z";logger.info(ZonedDateTime.parse(t).toEpochSecond() * 1000); 现在,字符串也可以 t = "2012-01-05"; 哪个引起了错误 Exception in th
我有一个文件可以具有日期修改值,具有日期或日期时间的格式.我曾经将值解析为:
String t = "2012-01-05T21:21:52.834Z"; logger.info(ZonedDateTime.parse(t).toEpochSecond() * 1000); 现在,字符串也可以 t = "2012-01-05"; 哪个引起了错误
如果我用(Reference)做这个字符串 LocalDate date = LocalDate.parse(t,DateTimeFormatter.ISO_DATE); logger.info(date.atStartOfDay(ZoneId.of("UTC")).toEpochSecond() * 1000); 这会奏效.但是,正如我已经提到的那样,字符串可以是这些类型中的任何一种,我如何识别格式然后相应地得到毫秒? 解决方法
可能的解决方案是使用具有默认值的可选模式.使用
DateTimeFormatterBuilder ,您可以将所需图案与时间部分附加在可选部分中,即被[…]包围.在没有字段的情况下,我们通过将它们设置为0来提供默认值.
OFFSET_SECONDS 字段为0表示没有与UTC的偏移.
public static void main(String[] args) { String[] dates = { "2012-01-05T21:21:52.834Z","2012-01-05" }; DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd['T'HH:mm:ss.SSSz]") .parseDefaulting(ChronoField.HOUR_OF_DAY,0) .parseDefaulting(ChronoField.MINUTE_OF_HOUR,0) .parseDefaulting(ChronoField.SECOND_OF_MINUTE,0) .parseDefaulting(ChronoField.NANO_OF_SECOND,0) .parseDefaulting(ChronoField.OFFSET_SECONDS,0) .toFormatter(); for (String date : dates) { ZonedDateTime zonedDateTime = ZonedDateTime.parse(date,formatter); System.out.println(zonedDateTime.toEpochSecond() * 1000); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |