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

标签 java unix-timestamp date-parsing localdate

我从 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/

相关文章:

java - 如果仅在顶部,如何限制此滑动刷新?

javascript - 将时间戳中的月份加一

java - 覆盖DateTimeFormatter本世纪的本地化日期样式解析策略

java - java Eclipse 中的工作区变量是什么?如何创建它们?

java - 从 DatePicker 更新 TextView

java - 在 play-framework 中获取 json

java - 无法解析的日期 : "Thu, 7 Dec 2017 07:40:40 "

mysql - 使用 Unix TimeStamp 格式的数据计算每月行数的 SQL 查询

java - 转换为unixtime : same input,不同的输出

c# - "dMMyyHHmmss"格式的 DateTime.ParseExact 不起作用(c#)