tl;博士
java.util.Date.from(
LocalDate.parse( "2017-01-23" )
.atStartOfDay( ZoneId.of( "America/Montreal" ) )
.toInstant()
)
不需要格式化模式
不需要格式化模式。您的输入字符串恰好采用标准 ISO 8601 格式。这些标准格式默认在 java.time 类中用于解析和生成字符串。
LocalDate
用于LocalDate
仅日期值,没有时间和时区。
LocalDate ld = LocalDate.parse( "2017-01-23" );
ZonedDateTime
如果你想要一个日期时间,让 java.time 确定一天的第一时刻。不要假设第一个时刻是00:00:00
。
确定一天中的第一时刻需要一个时区。日期因地区而异。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ld.atStartOfDay( z );
如果您想通过 UTC 的镜头感知那一刻,请提取一个Instant
对象。
Instant instant = zdt.toInstant();
Instant
相当于旧的 legacy类java.util.Date
。两者都代表 UTC 时间线上的一个时刻。现代类具有更精细的分辨率,纳秒而不是毫秒。
避免java.util.Date
正如其他人提到的,您应该坚持使用现代 java.time 类。但是,如果必须,您可以转换。查看添加到旧类的新方法。
java.util.Date d = java.util.Date.from( instant ) ;