如何将不同的日期字符串解析为LocalDate / Year?

时间:2019-06-13 05:32:06

标签: java unix-timestamp date-parsing localdate

我从Json获取对象列表,每个对象都包含日期字符串。有两种不同的格式,一种是标准的“ yyyy-MM-dd”格式,第二种是年份“ yyyy”。将这些字符串解析为unix时间戳的优雅方法是什么?目前,我正在使用带有SimpleDateFormat的双重try-catch块,但我想找到更好的解决方案。

2 个答案:

答案 0 :(得分:1)

如果长度为四个字符,则解析为Year

Year y = Year.parse( input ) ;

您想如何将其表示为片刻?也许是UTC一年中第一天的第一刻?

LocalDate ld = y.atDay( 1 ) ;
Instant instant = ld.atStartOfDay( ZoneOffset.UTC ).toInstant() ;

“ Unix时间戳”是指自1970年1月1日以来UTC的毫秒数?

long millis = instant.toEpochMilli() ;

如果输入的字符长度为10个字符,则解析为LocalDate

LocalDate ld = LocalDate.parse( input ) ;

与上述相同。

long millis = ld.atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;

将它们放在一起。

switch ( input.length() ) {
    case 4 : return Year.parse( input ).atDay( 1 ).atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;
    case 10 : return LocalDate.parse( input ).atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;
    default : … throw exception, unexpected input. 
}

答案 1 :(得分:0)

此答案是我对另一个问题的答案的副本。您的问题可能与该问题重复:How to convert String to Date without knowing the format?

我曾经有一个任务要编写一个代码,该代码可以将String解析为迄今尚未事先知道日期格式的日期。即我必须解析任何有效的日期格式。我写了一个项目,然后写了一篇文章,描述了实现背后的想法。这是文章的链接:Java 8 java.time package: parsing any string to date。 General Idea是将希望支持的所有模式写入外部属性文件,然后从那里读取它们,并尝试按一种格式逐一解析String,直到成功或用尽格式为止。请注意,顺序也很重要,因为某些字符串可能对几种格式有效(美国/欧洲差异)。优点是您可以在不更改代码的情况下继续向文件中添加/删除格式。这样的项目也可以针对不同的客户进行定制