i具有以下字符串:2019120610000100,它对应于10:00 +1的2019/12/06。 我如何将其转换为世界标准时间,在这种情况下为2019/12/06 09:00?
此字符串还可以具有+ 2,+ 3 ... -1,-2 ...时区,因此我也必须能够转换其他字符串。
在另一个实例中给定了+或-号,如果有用,可以将其添加到时间和日期字符串中。 (字符串可能变为201912061000 +0100)
现在,我正在手动转换它以分割字符串,但是我试图找到一种方法来确保此安全,因为它变得棘手,因为小时和分钟(如00)必须更改日期(可能是月份和年份)。 这是我到目前为止所做的:
hour -= hourOffset;
if(hour<0){
hour += 24
}
minutes -= minutesOffset;
if(minutes<0){
minutes += 60
}
答案 0 :(得分:2)
您可以通过以下代码直接将时间转换为UTC
String dateStr = "201912061000+0100";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
final LocalDateTime parse = LocalDateTime.parse(dateStr.substring(0, dateStr.length()-5), formatter);
final ZoneId zone = ZoneId.of("GMT"+dateStr.substring(12,15)+":"+dateStr.substring(15));
final ZonedDateTime given = ZonedDateTime.of(parse, zone);
final String toUTC = given.withZoneSameInstant(ZoneId.of("UTC"))
.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"));
答案 1 :(得分:2)
在处理日期和时间时,通常最好不要执行字符串操作,而要使用从java.time.temporal.Temporal
包扩展了java.time
的众多类之一(Java 8引入)。
在您的情况下,您想使用OffsetDateTime
,因为您的字符串精确地表示了:具有偏移量的日期时间。请注意,ZonedDateTime
在这里并不是真正合适的,因为偏移量信息(例如“ +01:00”)不足以代表整个时区。 Look at this SO question for more information.
要从字符串中获取import * as mapboxgl from 'mapbox-gl';
,您只需对其进行解析。
开始吧。
第1步:调整字符串以包含偏移符号(正负)。
npm install mapbox-gl --save
第2步:将该字符串解析为OffsetDateTime
对象。
String offsetSign = "+";
String datetimeString = "2019120610000100";
datetimeString = new StringBuilder(datetimeString).insert(datetimeString.length() - 4, offsetSign).toString();
第3步:将OffsetDateTime
转换为UTC。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmZ");
OffsetDateTime odt = OffsetDateTime.parse(datetimeString, dtf);
打印出这些变量
OffsetDateTime
将为您提供以下输出:
201912061000 + 0100
2019-12-06T10:00 + 01:00
2019-12-06T09:00Z
答案 2 :(得分:0)
String dateStr = "2019120610000100";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("yyyyMMddHHmm Z");
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm");
String adjustedDateStr = new StringBuilder(dateStr).insert(dateStr.length() - 4, " +").toString();
ZonedDateTime givenDate = ZonedDateTime.parse(adjustedDateStr, dtfInput);
ZonedDateTime timezoneAdjustedDate = ZonedDateTime.ofInstant(givenDate.toInstant(), ZoneId.of("UTC"));
System.out.println(dtfOutput.format(timezoneAdjustedDate));
由于您是从外部处理时区偏移的正负,因此您可以将其插入上面的示例中,而不是如果需要的话,可以将其插入正负。