java中周的显示_ISO8601中周的介绍及 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项目)

joda-time

joda-time

2.9.9

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);

参考网址

Joda-Time - Home

ISO 8601 - Wikipedia

ISO week date - Wikipedia

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值