问题描述
我使用 LocalDateTime.Now()
将当前日期时间保存在数据库中,我看到它保存为键值的Map
,在地图上我看到了时间,月份,年份,秒,纳米的键 - 等等。但我看不到任何有关区域的信息。那么,如果在不同区域中检索相同时间的日期说美国(从印度保存的数据),那么该怎么办呢?
解决方法
LocalDateTime不受地区或时区限制
引用extensive description of java.time,查看有关LocalDateTime的900多个投票答案:
它们不依赖于任何一个地区或时区。它们不受时间限制。除非您将其应用于某个地方以在时间轴上找到一个点,否则它们没有真正的意义。
从extensive description of java.time引出更多关于Java时间类型用法的信息:
因此,对于商务应用程序,“本地”类型不常用,因为它们仅表示可能的日期或时间的一般概念,而不是时间轴上的特定时刻。商业应用程序倾向于关心发票到达的确切时间,运送产品的运输,雇用员工或出租车离开车库的确切时间。因此,业务应用程序开发人员最常使用Instant和ZonedDateTime类。
下面是一个示例,其中使用一种推荐类型来指定时区“ America / Los_Angeles”:
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
这是另一种做同样的事情:
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),ZoneId.of("America/Los_Angeles"));
另一种做相同事情的变体:
ZonedDateTime zonedDateTime = ZonedDateTime.now().withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
您可以使用 ZoneId.getAvailableZoneIds()查看可用区域ID:
ZoneId.getAvailableZoneIds().stream().forEach(System.out::println);
通过以下网址了解有关java.time的更多信息:
extensive description of java.time,请查看900多个投票的答案。
您可以在此处阅读有关ZonId和ZoneOffset的更多信息: https://docs.oracle.com/javase/10/docs/api/java/time/ZoneId.html https://docs.oracle.com/javase/10/docs/api/java/time/ZoneOffset.html
,如overview of modern date-time classes in Java所示,具有时区信息的类是ZonedDateTime
,OffsetDateTime
,OffsetTime
等。类LocalDateTime
可以没有时区信息。
如here所述,
处理日期和时间(没有时区)的类是 LocalDateTime,Date-Time API的核心类之一。这个 类用于表示日期(月-日-年)和时间 (时分秒纳秒),实际上是
LocalDate
与LocalTime
。此类可用于表示 具体活动,例如路易威登杯首场比赛 美洲杯挑战者系列赛决赛,比赛始于1:10 下午请注意,这表示2013年8月17日下午1点10分。在当地时间。 要包括时区,您必须使用ZonedDateTime
或OffsetDateTime
,如Time Zone and Offset Classes中所述。
以下是使用OffsetDateTime
的示例代码:
OffsetDateTime odt = OffsetDateTime.now(ZoneOffset.UTC);// Change ZoneOffset as applicable
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1,odt);
st.executeUpdate();
st.close();
通过 Trail: Date Time 了解有关现代日期时间API的更多信息。
,Date date = new Date();
ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.of("US/Eastern"));
有不同的时区,根据它们的值,您可以拥有日期时间。