关于日期和时间的那些事,过来看看你都能搞对吗?

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!

  • 📢本文作者:由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月。

368f57a553351fa6675291c4e32ad60e.png

作为中国人,你肯定知道农历(阴历),阴历月份比太阳月份短。因此,每隔几年,他们就会增加一个月。

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 小时?

5be30bffb86f92a671694ee5060b17d8.png

夏令时澳大利亚/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 秒?

a838ec371b2797575cbf8bb932a334f9.png

由于气候和地质事件的影响, 地球的自转周期随时间而变化。通常,每隔几年变化约为一秒钟。

每当原子时间的变化变得太大时,就会插入一秒的校正,称为闰秒,这样做的方式是差异永远不会超过 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 服务器可能不准确

  • 网络可能拥塞

  • 网络可能不是对称的(向服务器发出的请求的跃点数与响应的跃点数不同)

  • 机器时钟可能不准确

结论

如果您的应用程序需要处理日期和时间,请务必了解您的应用程序的要求。

大多数情况下,您可以限制需要支持的范围!!

例如,您的应用程序是否需要为闰秒、遥远的历史日期或多个时区而烦恼?如果你能缩小范围,实现就会简单得多,你可能不必费心去关注日期和时间的所有细节!

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值