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

Java 根据时区将日历转换为日期,java,timezone,Java,Timezone,我写了一个代码,日历是根据时区准备的 Calendar toDayDateCalendar = Calendar.getInstance(TimeZone.getTimeZone(appTheme.getTimezoneId())); Date formattedSelectedDate = toDayDateCalendar.getTime(); 但是我要根据系统获取“formattedSelectedDate”。我想根据时区获取日期。如何获取它。(A)一个java.util.date对

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

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

Date formattedSelectedDate = toDayDateCalendar.getTime();
但是我要根据系统获取“formattedSelectedDate”。我想根据时区获取日期。如何获取它。

(A)一个
java.util.date
对象,不管名称如何,都表示UTC中的日期和时间。
日期
没有时区。事实上,它确实存在,但对于我们这里的目的来说,这是无关紧要的

所以你期望“我想根据时区来确定日期”是没有意义的

(B) 您使用的是几年前被现代java.time类取代的糟糕的日期时间类。切勿使用
日历
,切勿使用
日期
,切勿使用
时区

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

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

Date formattedSelectedDate = toDayDateCalendar.getTime();
ZoneId ZoneId=ZoneId.of(“非洲/突尼斯”);
ZonedDateTime Nowtonis=ZonedDateTime.now(zoneId);

如果只需要日期,不需要一天中的某个时间和时区,请使用
LocalDate

ZoneId ZoneId=ZoneId.of(“亚洲/东京”);
localdatetodaytoko=LocalDate.now(zoneId);

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现
    • 对于早期的Android((A)
      java.util.Date
      对象,不管名称如何,都表示UTC中的日期和时间。日期没有时区。实际上它有一个很深的时区,但对于我们这里的目的来说,这是不相关的

      所以你期望“我想根据时区来确定日期”是没有意义的

      (B) 您使用的日期时间类在几年前就被现代的java.time类所取代。永远不要使用
      日历
      ,永远不要使用
      日期
      ,永远不要使用
      时区

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

       Calendar toDayDateCalendar = Calendar.getInstance(TimeZone.getTimeZone(appTheme.getTimezoneId()));
      
      Date formattedSelectedDate = toDayDateCalendar.getTime();
      
      ZoneId ZoneId=ZoneId.of(“非洲/突尼斯”);
      ZonedDateTime Nowtonis=ZonedDateTime.now(zoneId);
      

      如果只需要日期,不需要一天中的某个时间和时区,请使用
      LocalDate

      ZoneId ZoneId=ZoneId.of(“亚洲/东京”);
      localdatetodaytoko=LocalDate.now(zoneId);
      

      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

      该项目现已启动,建议迁移到类

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

      从哪里获得java.time类

      • 、和更高版本-标准Java API的一部分,带有捆绑实现。
        • 带来了一些小功能和修复
        • 大多数java.time功能都在中向后移植到Java6和Java7
        • Android(26+)的更高版本捆绑了java.time类的实现

        • 对于早期的Android(如果您只想要日期,没有一天中的时间,也没有时区,请使用LocalDate。您说的“没有时区”是什么意思?@user3692033 a
          LocalDate
          只有一年、一个月和一个月中的一天。但是没有时区。例如,“2021年1月23日”,“2021年1月23日”
          LocalDate.of(2021年1月23日)
          。我们不知道这是否意味着日本东京的23日或美国俄亥俄州托莱多的23日——这两个日期发生在非常不同的时间,相差几个小时。在任何给定的时刻,全球各地的日期因时区而异。日本的一天开始和结束时间比美国大陆早得多。此外,一天的长度也可能不同如果我们考虑时区,因为夏时制(DST)等异常情况。我们可以为LocalDate设置不同的时区吗?不,@user3692033,
          LocalDate
          没有时区,所以这没有意义。你为什么要这样做?问,因为肯定有一种方法可以通过java.time实现你的最终目标。如果你只想要日期,没有一天中的某个时间,也没有时区,请使用LocalDate.What的意思是“没有时区”。@user3692033 a
          LocalDate
          只有一年、一个月和一个月中的一天。但是没有时区。例如,
          LocalDate.of(2021年1月23日),
          LocalDate.of(2021年1月23日)
          。我们不知道这是否意味着日本东京的23日或美国俄亥俄州托莱多的23日——这两个日期发生在非常不同的时间,相差几个小时。在任何给定的时刻,全球各地的日期因时区而异。日本的一天开始和结束时间比美国大陆早得多。此外,一天的长度也可能不同如果我们考虑时区,因为夏令时(DST)等异常情况。我们可以将不同的时区设置为LocalDate吗?不,@user3692033,
          LocalDate
          没有时区,因此不会使se