![](/img/trans.png)
[英]Convert date from GMT timezone to local time zone -- using ISO_OFFSET_DATE_TIME
[英]Java date time format pattern for ISO_OFFSET_DATE_TIME
我追求的是ISO_OFFSET_DATE_TIME
的日期时间格式模式
2019-09-30T10:05:16+10:00
yyyy-MM-dd'T'HH:mm:ssZ
对2019-09-30T10:05:16+1000
有效,但我需要在区域偏移量中使用冒号
如果这是不可能的,我将需要一个正则表达式。
你需要uuuu-MM-dd'T'HH:mm:ssXXX
在这里。
String str = "2019-09-30T10:05:16+10:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
OffsetDateTime datetime = OffsetDateTime.parse(str, formatter);
System.out.println(datetime);
这取决于。 DateTimeFormatter.ISO_OFFSET_DATE_TIME
打印和解析带和不带秒以及带和不带秒小数的字符串,后者最多 9 位小数。
如果您只需要问题中给出的格式变体的模式,有秒和没有秒,MC 皇帝的答案正是您所需要的。
如果您需要ISO_OFFSET_DATE_TIME
的完全灵活性,那么没有任何模式ISO_OFFSET_DATE_TIME
您的需求。 然后你需要去正则表达式的方式。 这反过来又很难给你像格式化程序那样严格的验证。 并且正则表达式可能仍然变得复杂且难以阅读。
链接:我对类似问题的回答以及更多细节。
您可以使用yyyy-MM-dd'T'HH:mm:ssZZZZZ
或uuuu-MM-dd'T'HH:mm:ssXXX
。
演示:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDateTime = "2019-09-30T10:05:16+10:00";
OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
// Default format i.e. OffsetDateTime#toString
System.out.println(odt);
// Custom format
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZZZZZ")));
System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")));
}
}
输出:
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.