【发布时间】:2015-03-16 00:45:11
【问题描述】:
我在 Heroku 上有一个 rails 应用程序,我认为我的时区配置正确(美国中部标准时间)。我希望以下内容返回今天的日期:
Time.now.to_date
但是,如果它在我的时间晚上 7 点之后,它会返回明天的日期。在您配置的时区内获取今天日期的最佳方式是什么。
【问题讨论】:
标签: ruby-on-rails date heroku time
我在 Heroku 上有一个 rails 应用程序,我认为我的时区配置正确(美国中部标准时间)。我希望以下内容返回今天的日期:
Time.now.to_date
但是,如果它在我的时间晚上 7 点之后,它会返回明天的日期。在您配置的时区内获取今天日期的最佳方式是什么。
【问题讨论】:
标签: ruby-on-rails date heroku time
我认为您正在寻找符合给定时区的Date.current。
【讨论】:
检查ENV['TZ'],这应该是US/Central 或America/Chicago 或类似的。空字符串表示 UTC。 Nil 表示使用系统设置,可以通过以下方式获取:
$ readlink /etc/localtime
检查Time.now.zone 应为CST 或CDT,具体取决于季节。
如果 TZ(或 /etc/localtime 符号链接)设置正确,我认为 Time 和 Date 应该都能满足您的期望。但我并不完全确定,我挑战每个偶然发现此笔记的人,让您在世界上任何地点的任何时间你碰巧在任何时间运行这段代码:
$ 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
【讨论】: