ISO 8601中周数的处理及 Joda-Time 的使用
生活随笔
收集整理的這篇文章主要介紹了
ISO 8601中周数的处理及 Joda-Time 的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不知道你是否忍受夠了JDK 中對周這種日期的處理,比如 2017-1-1.這天不知道你是該記為 2017年的第0周,還是第一周。而且周日到底是每周的第1天,或者是第0天,或者是周一才是每周的第1天,周日是第7天。總之,各個國家和地區都有不同的統計方式,而且中國古代歷法根本就沒有周的概念,也就是說周對于我們來說是個舶來品。統計方式每個人和組織都有不同的見解,雖然有國家標準,鮮有人去統一執行。
還好,國際化標準組織的國際標準ISO 8601 對日期和時間的表示方法做出了明確規定,周數也計算方式也做了詳細的說明,包括中國在內的國家標準 GB/T 7408-2005 都是依據該標準擴展而來。
根據ISO 8601 的規則。 1、每年有52周或者53周 2、周一至周日為一個完整周。 3、每周的周一是該周的第1天。周日是該周的第7天 4、 每年的第一周 為 每年的第一個 周四 所在的周。比如 2017年1月5日為當年的第一個周四,那么 2017-01-02 至 2017-01-08 為2017年第一周
5、每年的最后一周為當年最后一個周四所在的周。比如2016年12月29日為當年的最后一個周四,那么2016-12-26 至2017-01-01 為2016年的最后一周。
6、周年,當前周所在的年份為周年。比如 2017年1月1日的周年為2016年。2016年1月1日,2016年1月2日,2016年1月3日的周年均為2015年。
既然有了這么好的一個國際標準,大部分編程語言自然會對其支持。我們就按照這個標準執行,在數據的計算上就不應該有問題了,可是偏偏JDK1.7 及其之前的版本居然都不支持ISO 8601 標準。還好民間的力量比較大。有眾多API包都發布了對ISO 8601 的支持,其中joda-time最為流行。
引入 (maven項目) <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version></dependency>
1、Date轉Joda-time Date date = new Date(); DateTime dateTime = new DateTime(date); 2、Joda-time轉為Date DateTime dateTime = new DateTime(); Date date = dateTime.toDate(); 3、Calender轉為Joda-time Calendar c = Calendar.getInstance(); DateTime dt3 = new DateTime(c); 4、Joda-time轉為Calender DateTime dateTime = new DateTime(); Calendar c = dateTime.toCalendar(Locale.CHINA); 5、string轉為Joda-time DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); DateTime dt2 = fmt.parseDateTime("2017-05-15T10:25:17.432+08:00"); 6、Joda-time格式化輸出 DateTime dt = new DateTime(); dt.toString("yyyy-MM-dd");// 或者 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); fmt.print(dt);
參考網址 http://www.joda.org/joda-time/ https://en.wikipedia.org/wiki/ISO_8601 https://en.wikipedia.org/wiki/ISO_week_date
還好,國際化標準組織的國際標準ISO 8601 對日期和時間的表示方法做出了明確規定,周數也計算方式也做了詳細的說明,包括中國在內的國家標準 GB/T 7408-2005 都是依據該標準擴展而來。
根據ISO 8601 的規則。 1、每年有52周或者53周 2、周一至周日為一個完整周。 3、每周的周一是該周的第1天。周日是該周的第7天 4、 每年的第一周 為 每年的第一個 周四 所在的周。比如 2017年1月5日為當年的第一個周四,那么 2017-01-02 至 2017-01-08 為2017年第一周
5、每年的最后一周為當年最后一個周四所在的周。比如2016年12月29日為當年的最后一個周四,那么2016-12-26 至2017-01-01 為2016年的最后一周。
6、周年,當前周所在的年份為周年。比如 2017年1月1日的周年為2016年。2016年1月1日,2016年1月2日,2016年1月3日的周年均為2015年。
既然有了這么好的一個國際標準,大部分編程語言自然會對其支持。我們就按照這個標準執行,在數據的計算上就不應該有問題了,可是偏偏JDK1.7 及其之前的版本居然都不支持ISO 8601 標準。還好民間的力量比較大。有眾多API包都發布了對ISO 8601 的支持,其中joda-time最為流行。
引入 (maven項目) <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version></dependency>
1、Date轉Joda-time Date date = new Date(); DateTime dateTime = new DateTime(date); 2、Joda-time轉為Date DateTime dateTime = new DateTime(); Date date = dateTime.toDate(); 3、Calender轉為Joda-time Calendar c = Calendar.getInstance(); DateTime dt3 = new DateTime(c); 4、Joda-time轉為Calender DateTime dateTime = new DateTime(); Calendar c = dateTime.toCalendar(Locale.CHINA); 5、string轉為Joda-time DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); DateTime dt2 = fmt.parseDateTime("2017-05-15T10:25:17.432+08:00"); 6、Joda-time格式化輸出 DateTime dt = new DateTime(); dt.toString("yyyy-MM-dd");// 或者 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); fmt.print(dt);
參考網址 http://www.joda.org/joda-time/ https://en.wikipedia.org/wiki/ISO_8601 https://en.wikipedia.org/wiki/ISO_week_date
總結
以上是生活随笔為你收集整理的ISO 8601中周数的处理及 Joda-Time 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis基础——数据类型详解
- 下一篇: 【Python turtle】使用tur