我需要将以下字符串解析为DateTime对象:
30/Nov/2009:16:29:30 +0100
有没有简单的方法可以做到这一点?
PS:我希望按原样转换上述字符串。年份后面的冒号不是打错了。我也想用Ruby而不是RoR解决这个问题。
这个不也适用于Rails吗?
"30/Nov/2009 16:29:30 +0100".to_datetime
DateTime.strptime 允许你指定日期时间的格式并将字符串转换为日期时间。
%d/%b/%Y:%H:%M:%S %Z
。 - knut%Y
将匹配2015
(如预期)和2016-foo-bar
,因为它在看到2016
时停止。这种行为与C语言对应物一致;但是,C函数返回匹配结束的位置(例如“2016”情况下的第一个“ - ”),以便我们决定匹配是否精确;在Ruby中,它返回一个DateTime
,因此我们无法确定后面是否还有任何内容。 - Franklin Yu我已经成功地使用过以下技术:
require 'time'
t = Time.parse(some_string)
将字符串转换为日期:
# 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
请参考: https://ruby-doc.org/stdlib-3.1.1/libdoc/date/rdoc/Date.html
我使用了Time.parse("02/07/1988")
,和其他帖子中的一些人类似。
有趣的是,在打开IRB时,默认加载了Time
,但未定义Time.parse
。我必须require 'time'
才能让它工作。
这是在Ruby 2.2下的情况。
#!/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
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
require 'active_support/all'
然后"30/Nov/2009 16:29:30 +0100".to_datetime
(实际上您并不需要所有的active_support扩展,但祝您好运选择需要的扩展)。 - Matt Zukowskito_datetime
添加到String
对象中:require 'active_support/core_ext/string/conversions'
。 - xentek