我这个日期的格式如下:
String date = "2018-12-08T07:50:00+01:00";
我想以这种格式(在格林尼治标准时间加上小时数)获取本地时间,但我无法做到
date = "2018-12-08 08:50:00";
其他示例:
String date = "2018-12-08T07:50:00+04:00";
结果:
date = "2018-12-08 11:50:00";
有帮助吗?
答案 0 :(得分:1)
就像Sun在another answer中所说的那样,您误解了:2018-12-08T07:50:00+01:00
与UTC中的2018-12-08 06:50:00
是同一时间点(与GMT大致相同),而不是08:50
。 +01:00
表示时间来自时钟比UTC早1小时的地方,因此要减去UTC时间,应减去1小时,而不是相加。
DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String date = "2018-12-08T07:50:00+01:00";
OffsetDateTime dateTime = OffsetDateTime.parse(date);
OffsetDateTime dateTimeInUtc = dateTime.withOffsetSameInstant(ZoneOffset.UTC);
date = dateTimeInUtc.format(desiredFormatter);
System.out.println(date);
此代码段的输出为:
2018-12-08 06:50:00
使用另一个示例2018-12-08T07:50:00+04:00
,输出为
2018-12-08 03:50:00
我利用了您的字符串为ISO 8601格式的事实。 OffsetDateTime
将此格式解析为默认格式,也就是说,我们不需要在DateTimeFormatter
中指定格式(就像我们为您所需的结果格式所做的那样)。
答案 1 :(得分:0)
2018-12-08T07:50:00+01:00
,最后的+01:00
并不意味着adding hh:mm
,它意味着datetime已经是本地日期时间,在GMT中是2018-12-08T06:50:00
。
您可以使用string.replaceAll
删除T
和+01:00
:
String input = "2018-12-08T07:50:00+01:00";
input = input.replaceAll("T", " ");
input = input.replaceAll("\\+.*", "");
System.out.println(input); // 2018-12-08 07:50:00
或解析并重新设置其格式:
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2018-12-08T07:50:00+01:00");
String time = offsetDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " ");
System.out.println(time); // 2018-12-08 07:50:00