如何从添加 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 中指定格式(就像我们为您想要的结果格式所做的那样)。

Link: Wikipedia article: ISO 8601