Java 如何更改日历偏移量?

Java 如何更改日历偏移量?,java,android,android-calendar,timezone-offset,java.util.calendar,Java,Android,Android Calendar,Timezone Offset,Java.util.calendar,我需要更改日历时区偏移量 我尝试了很多东西 1- Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(TimeUnit.HOURS.convert(rawOffset, TimeUnit.MILLISECONDS) + System.currentTimeMillis()); 2- TimeZone timezone = new SimpleTimeZone(); timezone.setRawOffs

我需要更改日历时区偏移量

我尝试了很多东西

1-

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(TimeUnit.HOURS.convert(rawOffset, TimeUnit.MILLISECONDS) + 
System.currentTimeMillis());

2-

TimeZone timezone = new SimpleTimeZone();
timezone.setRawOffset(rawOffset);

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(timezone);
我们的API返回+1.0时区(柏林),但我无法更改日历时区偏移。如何改变?

java.time和ThreeTenABP 不要与原始偏移混在一起。Java比您更了解柏林的补偿。考虑不要使用<代码>日历>代码>。该类课程存在许多设计问题,被认为早已过时

    ZonedDateTime zdtBerlin = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
    System.out.println("Zeit in Berlin: " + zdtBerlin);
刚才我运行这个代码段时,得到了以下输出:

柏林Zeit:2019-02-08T19:23:00.275+01:00[欧洲/柏林]

顾名思义,
zoneDateTime
中有一个时区。在这种情况下,欧洲/柏林。它是
gregorianalendar
(抽象
Calendar
类中最常见的具体子类)的现代替代品

问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
你的代码出了什么问题? 代码片段1-:您正在将
日历的时间设置为未来一小时。您没有设置时区

代码段2-:第一个
SimpleTimeZone
没有无参数构造函数,因此
新建SimpleTimeZone()
将无法工作。接下来,它的
setRawOffset
需要以毫秒为单位的偏移量。如果
rawOffset
为1,则设置的偏移量为1毫秒

链接
  • 解释如何使用
    java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口
到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

  • “我们的API返回+1.0时区(柏林)”-作为供参考的
    双重
    ?旧日期时间类,如
    java.util.date
    java.util.Calendar
    java.text.SimpleDateFormat
    ,现在是遗留的,被这些类取代。大部分java.time功能都在项目中被向后移植到Java6和Java7。进一步适应早期Android(