想知道它们表示的是不同格式还是基本相同(只是新的还是旧的演示文稿)。
答案 0 :(得分:2)
X和x偏移量:这会根据图案字母的数量来格式化偏移量。
-一个字母仅输出小时,例如“ +01”,除非分钟非零,在这种情况下,分钟也会输出,例如“ +0130”。
-两个字母输出小时和分钟,不带冒号,例如'+0130'。
-三个字母输出小时和分钟,并带有冒号,例如'+01:30'。
-四个字母输出小时和分钟,可选秒,不带冒号,例如'+013015'。
-五个字母输出时,分和可选秒,并带有冒号,例如'+01:30:15'。
-六个或更多字母会引发IllegalArgumentException。当要输出的偏移量为零时,模式字母“ X”(大写)将输出“ Z”,而模式字母“ x”(小写)将输出“ +00”,“ + 0000”或“ +00” :00'。Offset Z:(偏移Z:)可根据图案字母的数量来格式化偏移。
-一个,两个或三个字母输出小时和分钟,不带冒号,例如'+0130'。当偏移量为零时,输出为'+0000'。
-四个字母输出本地化偏移的完整形式,相当于四个偏移量-O的字母。如果偏移量为零,则输出将是相应的本地化偏移量文本。
-五个字母输出小时,分钟,如果非零则输出可选的秒数(带冒号)。如果偏移量为零,则输出“ Z”。
-六个或更多字母会引发IllegalArgumentException。
代码:
public static void printDate(Temporal t, String format) {
System.out.println(DateTimeFormatter.ofPattern(format).format(t));
}
public static void testJavaTime() {
ZonedDateTime zdt = ZonedDateTime.now();
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZ"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZZ"); //2019-10-14 08:15:53.115GMT+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSZZZZZ"); //2019-10-14 08:15:53.115+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSX"); //2019-10-14 08:15:53.115+02
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXX"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXX"); //2019-10-14 08:15:53.115+02:00
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXXX"); //2019-10-14 08:15:53.115+0200
printDate(zdt, "yyyy-MM-dd HH:mm:ss.SSSXXXXX"); //2019-10-14 08:15:53.115+02:00
}
基于SimpleDateFormat
,这是可能的格式的简单问题:
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
无论Z
的数量如何,它将始终使用[-+]####
的格式
但是对于X
,情况就不同了。
X
:[-+]##
XX
:[-+]####
XXX
:[-+]##:##
现在,让我们演示一下:
public static void printDate(Date d, String format){
System.out.println(new SimpleDateFormat(format).format(d));
}
public static void testJavaDate() {
Date d = new Date();
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSZZZ"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSX"); //2019-10-14 07:52:10.308+02
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSXX"); //2019-10-14 07:52:10.308+0200
printDate(d, "yyyy-MM-dd HH:mm:ss.SSSXXX"); //2019-10-14 07:52:10.308+02:00
}