【问题标题】:Time.now.to_date is returning tomorrow, not todayTime.now.to_date 明天返回,而不是今天
【发布时间】:2015-03-16 00:45:11
【问题描述】:

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

Time.now.to_date

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

【问题讨论】:

    标签: ruby-on-rails date heroku time


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      检查ENV['TZ'],这应该是US/CentralAmerica/Chicago 或类似的。空字符串表示 UTC。 Nil 表示使用系统设置,可以通过以下方式获取:

      $ readlink /etc/localtime

      检查Time.now.zone 应为CSTCDT,具体取决于季节。

      如果 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多