【问题标题】:Ruby String to Date ConversionRuby 字符串到日期转换
【发布时间】:2010-08-30 09:34:57
【问题描述】:

我在 Ruby on Rails 中遇到了一个问题。我希望将格式为 Tue, 10 Aug 2010 01:20:19 -0400 (EDT) 的字符串转换为日期对象。

有没有我能做到的。

这是我查看并尝试过的以下内容,但没有成功:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Chronic Parser
  3. Ruby: convert string to date
  4. Parsing date from text using Ruby

请帮我解决这个问题。

【问题讨论】:

    标签: ruby-on-rails ruby datetime date


    【解决方案1】:

    Date.parse 方法有什么问题?

    str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
    date = Date.parse str
    => #<Date: 4910837/2,0,2299161>
    puts date
    2010-08-10
    

    它似乎有效。

    这里唯一的问题是时区。如果你想要UTC时区的日期,那么最好使用Time对象,假设我们有字符串:

    str = "Tue, 10 Aug 2010 01:20:19 +0400"
    puts Date.parse str
    2010-08-10
    puts Date.parse(Time.parse(str).utc.to_s)
    2010-08-09
    

    我找不到更简单的方法将Time 转换为Date

    【讨论】:

    • 感谢 Klew 和 Ryan。这就像一个魅力。我知道 Date.parse,但没有使用它。这对我来说是一个学习。
    • Ruby 1.9 有 Time#to_date 可以将时间转换为日期。
    • 如果我在日/月/年需要它怎么办,例如:2015 年 10 月 16 日?
    【解决方案2】:
    Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
    

    应该是:

    Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z')
    

    【讨论】:

      【解决方案3】:
      str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
      str.to_date
      => Tue, 10 Aug 2010
      

      【讨论】:

      • 我认为这是 Rails 的东西,而不是 Ruby 的东西
      【解决方案4】:

      你可以试试https://rubygems.org/gems/dates_from_string:

      在结构中查找日期:

      text = "get car from repair 2015-02-02 23:00:10"
      dates_from_string = DatesFromString.new
      dates_from_string.find_date(text)
      
      => ["2015-02-02 23:00:10"]
      

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多