文字列をDateTimeに変換する


97

次の文字列を解析してDateTimeオブジェクトに変換する必要があります。
30/Nov/2009:16:29:30 +0100

これを行う簡単な方法はありますか?

PS:上記の文字列をそのまま変換したい。年後のコロンはタイプミスではありません。RoRではなくRubyの問題も解決したいと思います。

回答:


99

DateTime.strptimeを使用すると、形式を指定して、文字列をDateTimeに変換できます。


1
ありがとう。見逃して、自分のフォーマットを与えることができた。これが動作するものです: '%d /%b /%Y:%H:%M:%S'
SkaveRat

1
@SkaveRat文字列はタイムゾーンを尊重していますか?私が使用する%d/%b/%Y:%H:%M:%S %Z
knut

4
使用可能なフォーマットの省略形のリストについては、 gist.github.com / halloffame / 5350249
Ryan

8
文字列の変換の例を指定するのは丁寧だろう。ユーザーが尋ねたのは、「そこを読んでみよう」(ところで大量の情報がある)だけではない。Stackoverflowは、外部ドキュメントへのリンクを提供するためではなく、質問への回答を提供するため人気がある
Daniel Garmoshka

「完全一致」を行う方法はありますか?現在の行動はそう、「最初からマッチング」で%Y、両方にマッチします2015(期待通り)と2016-foo-bar、それは見ているとき、それは停止しますので、2016。この動作はCの対応と一致しています。ただし、C関数-、一致が完全かどうかを判断するために、一致の最後(たとえば、「2016」の場合の最初)の位置を返します。Rubyではを返すDateTimeので、後で何かがまだあるかどうかはわかりません。
フランクリン・ユー

97

これも機能しないのですか?

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

1
Ruby 1.9.3を使用してRails 3.2.3でうまく動作します... "2012-05-16 02:30 UTC" .to_datetime => 2012年5月16日水曜日02:30:00 +0000
Tilo

58
これはRuby on Railsメソッドでもあり、Rubyメソッドではありません。
JackCA、2012年

5
これは、次のようになります。 require 'active_support/all' その後、 "30/Nov/2009 16:29:30 +0100".to_datetime (あなたが実際にすべてのactive_support拡張を必要としませんが、幸運を選択必要するものを考え出す)
マット・ズコウスキー

2
activesupportのはかなりsanelyにレイアウトされていますが、インパクトの最小量のために、これはあなたが取得する必要があり、すべてでなければなりませんto_datetimeに追加しStringたオブジェクト:require 'active_support/core_ext/string/conversions'
xentek

3
質問は「30 / Nov / 2009:16:29:30 +0100 "であり、「30 / Nov / 2009 16:29:30 +0100"ではありません。それが機能しないもう1つの理由です。
schmijos 2014年

45

私は成功しました:

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

15

Time.parse("02/07/1988")他のポスターと同じようにを使用しました。

興味深い問題は、TimeIRBを開いたときにデフォルトでロードされたTime.parseが、定義されていなかったことです。そうしなければならなかったrequire 'time'仕事にそれを得るために。

Ruby 2.2についても同様です。


12

これにより、日付の文字列が日時に変換されます。

"05/05/2012".to_time

20
これはRuby on Railsメソッドであり、Rubyメソッドではありません。
JackCA、2012年

1
これはこの質問への答えではありませんでしたが、それは私にたくさんを助けました。ありがとう@ user1425976
karlingen

10

中国のRails開発者向け:

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

5

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

0

指定されたタイムゾーンで日付時刻文字列を解析することもできます。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.