yyyy-MM-dd'T'HH:mm:ss.SSSZZ和yyyy-MM-dd'T'HH:mm:ss.SSSXXX之间的区别?

时间:2019-10-14 05:12:27

标签: java isodate

想知道它们表示的是不同格式还是基本相同(只是新的还是旧的演示文稿)。

1 个答案:

答案 0 :(得分:2)

基于DateTimeFormatter

  

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   
}