关于日期和时间的那些事,过来看看你都能搞对吗?
Posted webmote
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于日期和时间的那些事,过来看看你都能搞对吗?相关的知识,希望对你有一定的参考价值。
- 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
- 📢本文作者:由webmote 原创
- 📢作者格言:无尽的折腾后,终于又回到了起点,工控,我来了 !
1. 前言
有关日期类型,估计是每个学习编程语言都会接触到的类型概念。当然作为微软主推的c#尤其对日期的处理有更多的概念,还记得怎么格式化日期类型吗?
// => 2023/02/28 08:09:55:2350 星期二
DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff dddd");
今天是个独特的日子,仅以此行代码作为记录! 当然以下内容并不涉及到c#编程语言,作为读者,你大可不要有任何负担!
以下只是一些有关日期的问题,希望你都知道答案哦!
2. 1 年 = 12 个月?
直接说结论:有些日历使用闰月(譬如中国的农历),因此一年可以有 13 个月(今年闰二月)。
在 .NET BCL 中,接受介于 1 和 13 之间的值。这是为了适应具有闰月的日历系统,例如,Hebrew历将Adar作为普通年份的第 6 个月,在Hebrew闰年时, 将有Adar 1 和 Adar 2(第 6 个月和第 7 个月)。
有兴趣的朋友们可以查下 Ethopian
日历 和 Wondrous
日历。
3. 1 年 = 365 或 366 天
你是不是认为在公历中,闰年有366天,除此之外并无异样。
然而过去有各种各样的例子,一些国家改变了他们的日历。例如,英国在1752年改变了他们的日历,而在本次调整中,9月少了好几天,注意看下图的September
月。
作为中国人,你肯定知道农历(阴历),阴历月份比太阳月份短。因此,每隔几年,他们就会增加一个月。
4. 天数是连续的?
哦哦哦,是的,看上个例子的图,你会发现9月的天数并不是连续的。
还有许多其他例子。每次一个国家/地区更改其日历时,这些日子可能不是连续的。
5. 闰年每4年一次?
这个估计程序员们都知道了!
年份必须能被 4 整除,如果年份也可以正除以100,那就不是闰年,除非年份也能被 400 整除,这样才是闰年。
- 1900年不是闰年
- 2000年是闰年
- 2020年是闰年
有了上述规则,任何人都可以正确计算闰年。
6. 格林威治标准时间(GMT)与世界标准时间相同(UTC)一样吗?
UTC是国际计量局(BIPM)推荐作为时间法律依据的国际时间尺度。
格林威治标准时间 (GMT) 是一个时区,是伦敦格林威治皇家天文台的平均太阳时。它对应于UT1。
UTC和GMT之间的时间差在几分之一秒内。因此,通常这两个时间被认为是相同的。除非你是以科学研究为目的的。
7. 时区偏移量始终为整数?
许多时区不是整小时。例如,纽芬兰夏令时是 UTC-2:30。澳大利亚中西部标准时间是UTC+8:45。
8. 时区偏移量介于 -12 小时和 +12 小时之间?
莱恩群岛(Line Islands)时间是UTC+14
9. 夏令时(DST)始终为 -1 或 +1 小时?
夏令时澳大利亚/Lord_Howe是 30 分钟。在 Antartica/Troll
,偏移量为 2 小时。
在Sql Server 2016上,可以使用 sys.time_zone_info
,查询特定时区当前是否在DST上
select * from sys.time_zone_info
示例结果
name current_utc_offset is_currently_dst
Aleutian Standard Time -09:00 1
Hawaiian Standard Time -10:00 0
Marquesas Standard Time -09:30 0
Alaskan Standard Time -08:00 1
10. 夏令时在每个时区同时发生?
智利的夏令时从午夜开始。
在美国/多伦多,夏令时从凌晨 2 点开始。
在欧洲/巴黎,夏令时从三月的最后一个星期日开始。
在美国/多伦多,夏令时从三月的第二个星期日开始。
如果你采用Sql Server作为你的数据库,那么可以使用它的新语法转换夏令时。
inputdate AT TIME ZONE timezone
不过这家伙性能很差,切记切记额!
11. 一个国家/地区中的所有时区都遵守夏令时
在加拿大,许多时区都遵守夏令时,但是育空地区(美国/克雷斯顿)没有夏令时时钟变化。
从程序员角度看,中国取消夏令时,真是明智之举!
12. 日期时间 + 时区表示单个时间点?
夏令时可以将时钟向后移动,因此它可以表示两个不同的时刻。
13. 同一月份在任何地方都有相同的天数?
在瑞典, February 30th 1712
有效。
14. 1 分钟 = 60 秒?
由于气候和地质事件的影响, 地球的自转周期随时间而变化。通常,每隔几年变化约为一秒钟。
每当原子时间的变化变得太大时,就会插入一秒的校正,称为闰秒,这样做的方式是差异永远不会超过 0.9 秒。
例如,June 30th, 2012 11:59:60 PM
是有效时间!
在Windows Server 2016之前,微软时间服务不知道闰秒,而是依靠外部时间服务来处理这个问题。不过现在的Windows系统,知道闰秒了。
15. 一天是 24 小时?
日本在 1948-1951 年实施夏令时,但是,他们使用的策略与其他国家完全不同。他们只是在一天结束时添加一个小时:
Saturday 23:58
Saturday 23:59
Saturday 24:00 (no change of date)
Saturday 24:01
...
Saturday 24:58
Saturday 24:59
Sunday 00:00
Sunday 00:01
16. 一个国家有 1 个时区?
一个国家/地区可以有多个时区。
例如,中国幅员辽阔,按国际通行时区划分标准可划分为 东五区 、 东六区 、 东七区 、 东八区 、 东九区 5个 时区 。
17. 计算两个日期之间的天数很简单?
由于时区和日历的变化,计算 2 个日期之间的天数可能需要一些额外的逻辑。
例如您如何处理英国夏令时 1752 年 或太平洋/阿皮亚 2011 年缺失天数的情况?
18. 以 UTC 格式存储日期可防止所有问题?
如果你想把明年的会议安排在纽约上午10点,你不应该计算UTC日期并存储它。
事实上,您无法确定 DST 的规则在会议之前不会更改。
作者注:夏令时是一个政策上的东东,别指望它很符合以往的规则!
19. 机器之间的同步时间很容易?
同步时间在分布式系统中可能很重要,网络时间协议(NTP)协议允许在机器之间同步时间。但是有多种因素会使获得准确的时间变得困难:
- NTP 服务器可能不准确
- 网络可能拥塞
- 网络可能不是对称的(向服务器发出的请求的跃点数与响应的跃点数不同)
- 机器时钟可能不准确
结论
如果您的应用程序需要处理日期和时间,请务必了解您的应用程序的要求。
大多数情况下,您可以限制需要支持的范围!!
例如,您的应用程序是否需要为闰秒、遥远的历史日期或多个时区而烦恼?如果你能缩小范围,实现就会简单得多,你可能不必费心去关注日期和时间的所有细节!
👓都看到这了,还在乎点个赞吗?
👓都点赞了,还在乎一个收藏吗?
👓都收藏了,还在乎一个评论吗?
以上是关于关于日期和时间的那些事,过来看看你都能搞对吗?的主要内容,如果未能解决你的问题,请参考以下文章