gpt4 book ai didi

java - 解析并检索日期时间的时区偏移量

转载 作者:行者123 更新时间:2023-12-01 16:47:15 25 4
gpt4 key购买 nike

日期格式:“yyyy-MM-dd'T'HH:mm:ss.SSSZ

输入日期:“2017-09-18T03:08:20.888+0200

问题:我需要从输入字符串中检索时区偏移量并打印该时区中解析的日期。换句话说,我需要输出与输入相同。

SimpleDateFormat 成功解析输入日期并返回 java.util.Date 对象。 As we know , 日期没有时区字段。 SimpleDateFormat 将解析的日期转换为其时区,默认情况下是系统时区。当我打印此日期时,它是按系统时区打印的。

简单演示

private static void runDemoTask() throws ParseException {
final String dateTimeTimezoneFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
final SimpleDateFormat inputSdf = new SimpleDateFormat(dateTimeTimezoneFormat);
final String inputDate = "2017-09-18T01:08:20.888+0200";

Date parsedDate = inputSdf.parse(inputDate);

final SimpleDateFormat outputSdf = new SimpleDateFormat(dateTimeTimezoneFormat);
//outputSdf.setTimeZone("X_TIMEZONE_WHICH_I_NEED");
String output = outputSdf.format(parsedDate);
System.out.println(output);
}

输出

Mon Sep 18 00:08:20 GMT+01:00 2017

注意,输出日期具有系统时区,与输入字符串不同。

注意,我不会使用java.timeJoda Time和其他库,因为我需要支持现有代码。

<小时/>

可能的不愉快解决方案

我尝试使用正则表达式来检索符号和偏移量。

private static  String parseTimeZone(String input) {
final int singGroup = 1;
final int offsetGroup = 2;
final String timezonePatternStr = "([+-])(\\d{4})$";
final Pattern timezonePattern = Pattern.compile(timezonePatternStr);

Matcher matcher = timezonePattern.matcher(input);
if (matcher.find()) {
String sign = matcher.group(singGroup);
String offset = matcher.group(offsetGroup);
System.out.println(sign + " " + offset);
}

return "";
}

打印

+ 0200

最佳答案

谢谢你们,伙计们:@Thomas,@ole-v-v

final DateTimeFormatter inputSdf1 = DateTimeFormatter.ofPattern(dateTimeTimezoneFormat);
OffsetDateTime d = OffsetDateTime.parse(inputDate, inputSdf1);

ZoneOffset zo = d.getOffset(); //Offset from the input.
TimeZone tz = TimeZone.getTimeZone(zo.normalized());

outputSdf.setTimeZone(tz);
System.out.println(outputSdf.format(parsedDate));

关于java - 解析并检索日期时间的时区偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com