根据时区将日历转换为日期

时间:2021-04-30 05:25:15

标签: java timezone

我写了一个代码,其中日历是根据时区准备的。

 Calendar toDayDateCalendar = Calendar.getInstance(TimeZone.getTimeZone(appTheme.getTimezoneId()));

Date formattedSelectedDate = toDayDateCalendar.getTime();

但是我根据 System.i 得到了“formattedSelectedDate”。我想根据时区获取日期。我怎样才能得到它。

1 个答案:

答案 0 :(得分:2)

(A) 一个 java.util.Date 对象,尽管名称如此,但代表一个日期和时间,如 UTC 中所见。 Date 没有时区。嗯,实际上它确实深入,但对于我们这里的目的而言,这无关紧要。

所以你对“我想根据时区获取日期”的期望是没有意义的。

(B) 您正在使用 可怕的 日期时间类,这些类在多年前被现代 java.time 类取代。永远不要使用Calendar,永远不要使用Date,永远不要使用TimeZone

获取在特定时区看到的当前时刻。

ZoneId zoneId = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime nowTunis = ZonedDateTime.now( zoneId ) ;

如果您只想要日期,没有时间和时区,请使用 LocalDate

ZoneId zoneId = ZoneId.of( "Asia/Tokyo" ) ;
LocalDate todayTokyo = LocalDate.now( zoneId ) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为 JSR 310

现在位于 Joda-Timemaintenance mode 项目建议迁移到 java.time 类。

您可以直接与您的数据库交换 java.time 对象。使用符合 JDBC driver 或更高版本的 JDBC 4.2。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 和 JPA 2.2 支持 java.time

从哪里获取 java.time 类?

相关问题