2013年1月8日 星期二

ISO8601 & RFC822 日期格式

在訊息交換若是遇到日期格式時,目前會有兩種方式:
  1. ISO8601,例如:2012-12-05T10:55:41.063+08:00
  2. RFC822,例如:2012-12-05T10:55:41.063+0800
兩者的差異只在時區欄位一個有冒號,一個沒有而已。

目前Java在支援這兩種日期格式是有版本上的問題,在Java 6之前只支援RFC822,在Java 7之後才開始支援ISO8601。
  1. Java 7 java.text.SimpleDateFormat
  2. Java 6 java.text.SimpleDateFormat
從Java Docs可以發現,在Java 6裡面Z代表RFC 822 time zone,但是Z這個符號在ISO8601裡面代表Zulu Time,也就是UTC,所以在Java 7新增了X符號代表ISO8601 time zone。
所以兩種格式的樣式如下:
  1. ISO8601:yyyy-MM-dd'T'HH:mm:ss.SSSX
  2. RFC822:yyyy-MM-dd'T'HH:mm:ss.SSSZ
那麼我們要在Java 6之前使用ISO8601該怎麼做呢?

目前JavaScript也都有支援ISO格式:JavaScript Date Object
用這樣的日期格式就可以讓瀏覽器與伺服器之間溝通包含時間的訊息,而不會遺失time zone。