如何从添加hh:mm的特定字符串获取本地时间

时间:2018-08-19 09:50:35

标签: java date datetime datetime-format gmt

我这个日期的格式如下:

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";

有帮助吗?

2 个答案:

答案 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中指定格式(就像我们为您所需的结果格式所做的那样)。

链接: Wikipedia article: ISO 8601

答案 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