jbk*_*jbk 6 ruby time standard-library
也许是一个愚蠢的问题,表明我对夏令时的基本原理缺乏了解,但根据标题,如何Time.dst?
知道时间对象是真的还是假的?
据推测,这必须通过日期和时区的组合来辨别,但那时没有意义,因为时区的低纬度不使用夏令时?因此,它肯定需要位置才能辨别#dst??
我错过了什么?
为了处理时区和夏令时,Ruby 与其他所有事物一样,调用localtime_r
C函数。这会将时间放入名为 的 C 结构中tm
,其中包含一个名为 的字段isdst
。鲁比正在读那面旗帜。
localtime_r
isdst
首先通过从全局变量获取您的时区来计算tzname
。tzname
是通过调用确定的tzset
。它的工作如何tzset
依赖于系统。它可以来自 TZ 环境变量、读取文件或查询操作系统服务。
例如。
# Time zone from the system.
$ ruby -e 'puts Time.now.zone; puts Time.now.dst?'
PDT
true
# Time zone from the TZ environment variable.
$ TZ='Australia/Brisbane' ruby -e 'puts Time.now.zone; puts Time.now.dst?'
AEST
false
Run Code Online (Sandbox Code Playgroud)
一旦有了时区,localtime_r
就可以使用“tz 数据库”又名“tzdata”又名“zoneinfo”又名“Olson 数据库”(以其创建者 Arthur 命名)从GMT转换为所需时区(使用该日期应用的规则)大卫·奥尔森. 以前是私人项目,现在由IANA维护。它是一组安装在您的系统上或随 Ruby 一起提供的文件,其中包含的内容远远超出您想了解的有关时区和夏令时的一切。
tz 数据库将夏令时(以及其他奇怪的事情,例如战争与和平时间)视为另一个时区。时区记录一直追溯到我们有时区的那一天。在我们有时区之前,该位置使用的是太阳正午。由于这些历史复杂性和时区变化,tz 数据库更喜欢与城市(例如“美国/纽约”)合作并为您确定时区。
时区数据文件包含广泛的评论和背景,如果您对日历的历史感兴趣,那么它们是一本令人着迷的读物。
归档时间: |
|
查看次数: |
434 次 |
最近记录: |