Java 如何将OffsetTime转换为本地OffsetTime?
为了处理Java 如何将OffsetTime转换为本地OffsetTime?,java,datetime,time,java-8,datetimeoffset,Java,Datetime,Time,Java 8,Datetimeoffset,为了处理OffsetTime,我想将其转换为本地OffsetTime。例如,如果系统默认偏移量为+1:00,则将14:03:04.708-01:00转换为16:03:04.708+01:00 我该怎么做 使用: 正如@Jesper的回答正确地说明了如何在OffsetTime实例上更改偏移量,而不更改它所指向的即时是通过调用withOffsetSameInstant 难点在于确定系统的默认偏移量。系统没有默认偏移量,它有一个默认的ZoneId。ZoneId有一个偏移量,但如果采用DST,该偏移量可
OffsetTime
,我想将其转换为本地OffsetTime
。例如,如果系统默认偏移量为+1:00
,则将14:03:04.708-01:00
转换为16:03:04.708+01:00
我该怎么做 使用:
正如@Jesper的回答正确地说明了如何在
OffsetTime
实例上更改偏移量,而不更改它所指向的即时
是通过调用withOffsetSameInstant
难点在于确定系统的默认偏移量。系统没有默认偏移量,它有一个默认的ZoneId
。ZoneId
有一个偏移量,但如果采用DST,该偏移量可能全年都会发生变化
从您的问题中不清楚我们是否可以确定一年中的哪个时间与您的用例相关。可能现在对您的用例有效。您可能有一个LocalDate
,在该日期上对OffsetTime
进行评估。如果是这种情况,您可以获得如下系统默认值:
LocalDateTime localDateTime = LocalDateTime.of(localDate, offsetTime.toLocalTime());
ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(localDateTime);
DateTimeFormatter
对象,只要日期时间字符串符合ISO 8601标准+01:00
小时;相反,您应该从API获得它import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String strTime = "14:03:04.708-01:00";
OffsetTime parsedOffsetTime = OffsetTime.parse(strTime);
System.out.println(parsedOffsetTime);
OffsetTime offsetTimeAtOffset0100 = parsedOffsetTime.withOffsetSameInstant(ZoneOffset.of("+01:00"));
System.out.println(offsetTimeAtOffset0100);
// Time at JVM's default timezone offset
ZoneOffset jvmTzOffset = ZonedDateTime.now(ZoneId.systemDefault()).getOffset();
OffsetTime offsetTimeAtJvmTzOffset = parsedOffsetTime.withOffsetSameInstant(jvmTzOffset);
System.out.println(offsetTimeAtJvmTzOffset);
}
}
14:03:04.708-01:00
16:03:04.708+01:00
16:03:04.708+01:00
输出:
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String strTime = "14:03:04.708-01:00";
OffsetTime parsedOffsetTime = OffsetTime.parse(strTime);
System.out.println(parsedOffsetTime);
OffsetTime offsetTimeAtOffset0100 = parsedOffsetTime.withOffsetSameInstant(ZoneOffset.of("+01:00"));
System.out.println(offsetTimeAtOffset0100);
// Time at JVM's default timezone offset
ZoneOffset jvmTzOffset = ZonedDateTime.now(ZoneId.systemDefault()).getOffset();
OffsetTime offsetTimeAtJvmTzOffset = parsedOffsetTime.withOffsetSameInstant(jvmTzOffset);
System.out.println(offsetTimeAtJvmTzOffset);
}
}
14:03:04.708-01:00
16:03:04.708+01:00
16:03:04.708+01:00
注意:我的时区是欧洲/伦敦
,当前偏移量为01:00
小时
了解更多关于java.time
、来自的*
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
这将对其进行硬编码,而不是采用系统默认值。谢谢,这使我领先了一步。但是,它仍然使用ZoneOffset常量而不是系统默认值。
OffsetTime.now().getOffset()
是获取系统默认偏移量的唯一方法吗?问题是使用DST的区域在冬季和夏季具有不同的偏移量