时区简单理解

https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA

上面的链接是时区的wiki说明,下面说说我记住的部分:

GMT时区是格林威治标准时间,我把它理解为 “真实时间”

UTC时区是根据GMT得来的"世界标准时间”,它的时间和GMT是相同的

CST可以指下列的时区:

澳洲中部时间,Central Standard Time (Australia)中部标准时区(北美洲),Central Standard Time (North America)北京时间,China Standard Time古巴标准时间,Cuba Standard Time,参见北美东部时区

其中我们所在的时区背景时间 CST=UTC+8小时,也就是说,真实时间是0点的时候,背景时间是8点

ISO_8601日期格式标准

https://zh.wikipedia.org/wiki/ISO_8601

上面是日期格式标准的wiki

当前的UTC时间是2016-01-07T01:58Z,其中Z是4位数字格式的时间偏移量,不写的时候默认不偏移。

其中,字母T代表使用UTC时间,字母Z代表时间偏移量,实际写法中字母Z应该被偏移量替换,例如 “2017-1-7T10:21+0800"或者"2017-1-7T10:21-0800”,字母Z被+0800和-0800替换了。

在浏览器中直接new一个date对象,因为我们处于UTC+0800的时区,所以控制台给我们打印出来的时间是GMT+0800的时间

2016-01-07T00:00 代表UTC时区1月7日0时0分(在控制台中显示UTC+0800时区为8时0分)

2016-01-07T00:00 0800 代表UTC+0800时区1月7日0时0分,2016-01-07T00:00 -0800 代表UTC-0800时区1月7日0时0分,在控制台中显示分别如下

通过日期字符串new一个Date对象,输入的时间字符串是2016-1-7 10:21,没有带ISO标准的"T"字母,因此浏览器认为我们想输入的是当地时间

https://zoucz.com/blog/2016/01/29/date-iso/

周数

ISO8601中周的介绍及 Joda-Time 的使用

沈颖 2017.05.26 09:30:05 字数 790 阅读 1,174 不知道你是否忍受够了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最为流行。

https://www.jianshu.com/p/91fa08454a2c