如何从添加 hh:mm 的特定字符串中获取本地时间
Posted
技术标签:
【中文标题】如何从添加 hh:mm 的特定字符串中获取本地时间【英文标题】:How to get local time from a specific string adding hh:mm 【发布时间】:2019-01-25 17:46:04 【问题描述】:我有这个格式的日期:
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";
有什么帮助吗?
【问题讨论】:
类似于Convert OffsetDateTime to UTC Timestamp(虽然可能不是严格的重复)。不过,我认为您应该能够从搜索引擎为您带来的内容中拼凑出答案。 【参考方案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);
这个 sn-p 的输出是:
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
【讨论】:
【参考方案2】:2018-12-08T07:50:00+01:00
,后面的+01:00
不代表adding hh:mm
,表示日期时间已经是本地日期时间,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
【讨论】:
与使用正则表达式的低级字符串操作相比,我显然更喜欢解析和重新格式化。无论如何,还应该将日期时间存储在OffsetDateTime
类型的变量中。
@OleV.V.如果结果只是针对 UI,那么这两种方法没有区别。否则首选第二个。以上是关于如何从添加 hh:mm 的特定字符串中获取本地时间的主要内容,如果未能解决你的问题,请参考以下文章
如何在Java中以字符串格式获取当前时间戳? “yyyy.MM.dd.HH.mm.ss”
如何从日期格式“yyyy-MM-dd'T'HH:mm:ss.SSSZ”中分别获取日期、年份、小时、分钟?
从奇数Dd HH:MM:SS.mm格式中提取时间数据[关闭]
如何获取 IST 格式的当前系统时间并将其与 HH:mm:ss 格式的时间(字符串数据类型)进行比较? java语言的解决方案