【发布时间】:2017-11-18 01:08:58
【问题描述】:
我有一个日期以字符串格式 ddMMyyyy 和 hh:mm 和 TimeZone 存储在数据库中。 我想根据这些信息创建一个 Instant,但我不知道该怎么做。
类似
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
【问题讨论】:
-
你的意思是
ZonedDateTime.ofInstant(instant, TimeZone.getDefault())吗? -
@soorapadman 这将返回 ZonedDateTime。 OP 想要一个 Instant。
-
永远不要使用 3-4 个字符的缩写来表示时区。 这些是非实时时区,没有标准化,甚至不是唯一的!以
continent/region的格式使用true time zone names,例如Europe/London、Europe/Paris、Asia/Kolkata、Pacific/Auckland。如果“ECT”是指厄瓜多尔时间,请使用ZoneId.of( "America/Guayaquil" )。如果您指的是中欧,请使用适当的Europe/…区域名称。 -
此问题不是与该链接问题重复。这个问题与毫秒数没有直接关系。
-
“我有一个日期以字符串格式 ddMMyyyy 和 hh:mm 和 TimeZone 存储在数据库中。”不,如果您在定义 DB 列时使用了日期时间数据类型,例如
TIMESTAMP WITH TIME ZONE(您应该这样做),则不会。日期时间列没有“格式”,因为它们是 not 字符串/文本。检索日期时间值作为日期时间对象而不是字符串。Instant instant = myResultSet.getObject( … , Instant.class ) ;
标签: java date java-8 localdate