convert String to DateTime

我需要将以下字符串解析为一个 DateTime 对象:
30/Nov/2009:16:29:30 +0100

有什么简单的方法吗?

PS: 我想按原样转换上面的字符串。年份后面的冒号不是打错了。我还想用 Ruby 而不是 RoR 来解决这个问题。

190197 次浏览

Strptime 允许指定格式并将 String 转换为 DateTime。

在 Ruby 1.8中,ParseDate 模块将转换这种格式和许多其他日期/时间格式。但是,它不能优雅地处理年和小时之间的冒号。假设冒号是一个输入错误,实际上是一个空格,那么:

#!/usr/bin/ruby1.8


require 'parsedate'


s = "30/Nov/2009 16:29:30 +0100"
p Time.mktime(*ParseDate.parsedate(s))    # =>  Mon Nov 30 16:29:30 -0700 2009

Shouldn't this also work 为 Rails?

"30/Nov/2009 16:29:30 +0100".to_datetime

如果使用 铁路,这将把 date 中的字符串转换为 datetime:

"05/05/2012".to_time

Doc Reference: https://apidock.com/rails/String/to_time

我在以下方面取得了成功:

require 'time'
t = Time.parse(some_string)

我用的是 Time.parse("02/07/1988")像其他海报一样。

An interesting gotcha was that Time was loaded by default when I opened up IRB, but Time.parse was not defined. I had to require 'time' to get it to work.

这就是 Ruby 2.2。

转换字符串到日期:

# without timezone
DateTime.strptime('2012-12-09 00:01:36', '%Y-%m-%d %H:%M:%S')
=> Sun, 09 Dec 2012 00:01:36 +0000


# with specified timezone
DateTime.strptime('2012-12-09 00:01:36 +8', '%Y-%m-%d %H:%M:%S %z')
=> Sun, 09 Dec 2012 00:01:36 +0800

refer to: Https://ruby-doc.org/stdlib-3.1.1/libdoc/date/rdoc/date.html

您还可以解析具有给定时区的日期时间字符串:

zone = "Pacific Time (US & Canada)"
ActiveSupport::TimeZone[zone].parse("2020-05-24 18:45:00")
=> Sun, 24 May 2020 18:45:00 PDT -07:00