我从 Json 获取对象列表,每个对象都包含日期字符串。有两种不同的格式,一种是标准的“yyyy-MM-dd”格式,第二种是年份“yyyy”。将这些字符串解析为 unix 时间戳的优雅方法是什么?目前我正在使用带有 SimpleDateFormat 的双 try-catch block ,但我想找到更好的解决方案。
最佳答案
如果长度为四个字符,则解析为年份
。
Year y = Year.parse( input ) ;
您想如何将其表示为一个时刻?也许是一年中第一天的第一时刻(UTC)?
LocalDate ld = y.atDay( 1 ) ;
Instant instant = ld.atStartOfDay( ZoneOffset.UTC ).toInstant() ;
“Unix 时间戳”是指自 UTC 1970 年第一时刻以来的毫秒数吗?
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.
}
关于java - 如何将不同的日期字符串解析为LocalDate/Year?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56573908/