如何从添加 hh:mm 的特定字符串中获取当地时间
How to get local time from a specific string adding hh:mm
我有这个格式的日期:
String date = "2018-12-08T07:50:00+01:00";
我想以这种格式获取当地时间(加上 GMT 的小时数),但我做不到
date = "2018-12-08 08:50:00";
其他示例:
String date = "2018-12-08T07:50:00+04:00";
结果:
date = "2018-12-08 11:50:00";
有什么帮助吗?
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
正如 Sun 在 中所说,您误解了:2018-12-08T07:50:00+01:00
与 UTC 中的 2018-12-08 06:50:00
是同一时间点(与 GMT 大致相同),而不是 [=13] =]. +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
中指定格式(就像我们为您想要的结果格式所做的那样)。
我有这个格式的日期:
String date = "2018-12-08T07:50:00+01:00";
我想以这种格式获取当地时间(加上 GMT 的小时数),但我做不到
date = "2018-12-08 08:50:00";
其他示例:
String date = "2018-12-08T07:50:00+04:00";
结果:
date = "2018-12-08 11:50:00";
有什么帮助吗?
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
正如 Sun 在 2018-12-08T07:50:00+01:00
与 UTC 中的 2018-12-08 06:50:00
是同一时间点(与 GMT 大致相同),而不是 [=13] =]. +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
中指定格式(就像我们为您想要的结果格式所做的那样)。