在时间T,我调用一个SystemTime::now().duration_since(UNIX_EPOCH);在时间T +10,当夏令时开始时,我调用相同的调用。这两个执行严修之间是否会有任何奇怪的行为?
SystemTime::now().duration_since(UNIX_EPOCH)
ryevplcw1#
SystemTime本身完全独立于时区。时区,作为一个概念,谈论如何以一种有用的方式向人类显示时间-SystemTime根本不与人类交谈,它只是获取当前时间。因此,由于UNIX_EPOCH是一个完全不受时区影响的时间点(它被定义为1970-01-01 00:00:00 UTC,这是一个与时区无关的固定时间点),因此不可能观察到时区因素(如夏令时)对SystemTime的影响。chrono应该在以下情况下使用:希望以人类可读的格式向用户显示时间,或者希望从用户输入中解析时间,或者执行更复杂的编程,处理人类对时间的解释,而不是时间和持续时间本身的原始概念。例如,仅仅计算Unix时间戳就不应该用chrono来完成(chrono也不会有帮助)。
SystemTime
UNIX_EPOCH
chrono
hec6srdp2#
以下是documentation:系统时钟的度量,用于与外部实体(如文件系统或其他进程)通信。与Instant类型不同,该时间测量不是单调的。这意味着您可以将一个文件保存到文件系统,然后将另一个文件保存到文件系统,并且第二个文件的SystemTime度量值早于第一个文件。换句话说,在另一个操作之后真实的发生的操作可能具有更早的SystemTime!事实上,这可能是由于几个原因而不仅仅是夏令时,例如简单的时钟同步。如果这些特性不适合您的用例,我建议使用chrono,就像其他人在评论中建议的那样。
Instant
2条答案
按热度按时间ryevplcw1#
SystemTime
本身完全独立于时区。时区,作为一个概念,谈论如何以一种有用的方式向人类显示时间-SystemTime
根本不与人类交谈,它只是获取当前时间。因此,由于UNIX_EPOCH
是一个完全不受时区影响的时间点(它被定义为1970-01-01 00:00:00 UTC,这是一个与时区无关的固定时间点),因此不可能观察到时区因素(如夏令时)对SystemTime
的影响。chrono
应该在以下情况下使用:希望以人类可读的格式向用户显示时间,或者希望从用户输入中解析时间,或者执行更复杂的编程,处理人类对时间的解释,而不是时间和持续时间本身的原始概念。例如,仅仅计算Unix时间戳就不应该用chrono
来完成(chrono
也不会有帮助)。hec6srdp2#
以下是documentation:
系统时钟的度量,用于与外部实体(如文件系统或其他进程)通信。
与
Instant
类型不同,该时间测量不是单调的。这意味着您可以将一个文件保存到文件系统,然后将另一个文件保存到文件系统,并且第二个文件的SystemTime
度量值早于第一个文件。换句话说,在另一个操作之后真实的发生的操作可能具有更早的SystemTime
!事实上,这可能是由于几个原因而不仅仅是夏令时,例如简单的时钟同步。如果这些特性不适合您的用例,我建议使用
chrono
,就像其他人在评论中建议的那样。