Time.now.to_date 明天回来,不是今天

Time.now.to_date is returning tomorrow, not today

我在 Heroku 上有一个 rails 应用程序,我认为我的时区配置正确(美国中部标准时间)。我希望 return 今天的日期如下:

Time.now.to_date

但是 return 如果我的时间是晚上 7 点之后,则改为明天的日期。在您配置的时区内获取今天日期的最佳方式是什么。

我认为您正在寻找符合给定时区的 Date.current

勾选 ENV['TZ'],这对您来说应该是 US/CentralAmerica/Chicago 或类似的。空字符串表示 UTC。 Nil表示使用系统设置,可以通过:

$ readlink /etc/localtime

勾选 Time.now.zone,根据季节应该是 CSTCDT

如果 TZ(或 /etc/localtime 符号链接)设置正确,我认为时间和日期应该都能满足您的期望。但我不完全确定,我向所有偶然发现此便条的人提出挑战,要求在世界上任何地点、任何一天的任何时间使用此代码 运行,你恰好是:

$ ruby -r time -e 'puts ENV["TZ"]+" "+Time.now.iso8601+" "+(Date.today == Time.now.to_date).to_s'

现在对我来说:

Europe/Budapest 2020-04-21T22:12:23+02:00 true

我希望行尾始终为真,但 Date 的文档对我来说非常晦涩。让我们实践一下。

如果你关心的话,我刚刚发现我可以使用以下 bash 脚本将我的位置转换为时区名称:

$ tzselect -c +47.6418+19.154 -n 1 <<<$'1\n1' 2>/dev/null

导致

Europe/Budapest