真正展现技术的时候到了。今天会展示时间魔法里的一点高级货:如何获得本地系统所在时区的偏移量,也就是我们通常所说的time zone offset。另外一个是如何根据从1970年1月1日到今为止总的天数/毫秒数计算获得日期(格里高利历,我们称为公历)。
再开始具体展现时间魔法之前,我稍微回顾一下和时间相关联的几个地理和历史知识。
时区
首先,是关于时区的。我们都知道不同的地方使用的时间是不一样的。例如在中国我们通常使用的是北京时间,而在美国会使用纽约时间。从时区的角度讲,前者属于东八区,后者属于西五区,两者相差13个小时。受地球自转影响,太阳在地球上不同地方升起的时间有早晚,因此全球沿着经度划分了24个时区,相邻的时区时间上会差上一个小时。而时区的划分通常需要一个基准时间,我们叫做格林尼治标准时间,专业英文简写为GMT或者UTC。而北京时间即东八区时间又可以表示为GMT+8或者UTC+8。所以你在使用Java或者JavaScript打印时间看到“Wed Nov 23 2022 21:35:57 GMT+0800”这样的时间戳文本就应该对其中的“GMT+0800”这样的字样不会感到奇怪了。
格里高利历
格里高利历,又称公历,是现今全球使用的通用历法。最早记载据传是由意大利医生兼哲学家Aloysius Lilius从儒略历等古代历法改进过来的。最后在1582年,由时任罗马教皇的格里高利十三世批准推行,故此,称为格里高利历。格里高利历是从1年1月1日开始,这一天也称为公元元年,据传说是耶稣诞生的日子,但是无从得知。
1970年1月1日
1970年1月1日,这是一个特殊的日期。很多熟悉Java或者JavaScript的程序员肯定对它不会陌生。如果你需要处理时间,那么就免不了和它打交道。因为Java或者JavaScript甚至是C++里,所有的时间都是从1970年1月1日开始计时的。那么为什么不使用公历元年或者某个重要的特殊日子呢?这