2010-02-04 170 views
69

我需要解析以下字符串DateTime對象:
30/Nov/2009:16:29:30 +0100字符串轉換爲DateTime

是否有一個簡單的方法來做到這一點?

PS:我想按原樣轉換上面的字符串。一年後的冒號不是錯字。我也想用Ruby解決問題,而不是RoR。

+0

是年份和小時之間錯字結腸? – 2010-02-04 15:33:49

+0

不,不是排字錯誤 – SkaveRat 2010-02-04 15:47:36

回答

82

DateTime.strptime允許您指定格式並將字符串轉換爲DateTime。

+1

謝謝。錯過了,我可以給它我自己的格式。這是工作的:'%d /%b /%Y:%H:%M:%S' – SkaveRat 2010-02-04 15:56:04

+1

@SkaveRat您的字符串是否尊重時區?我使用'%d /%b /%Y:%H:%M:%S%Z' – knut 2012-05-01 20:04:50

+4

有關可用格式縮寫的列表https://gist.github.com/halloffame/5350249 – Ryan 2013-04-09 23:54:31

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 
66

不應該這樣也行嗎?

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

不行,我只是試了 – Jacob 2012-03-23 23:04:55

+0

它繼續爲我在紅寶石1.9.2,可能應該提到,當我張貼片段。 – xentek 2012-03-29 18:38:20

+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 2012-05-22 21:59:48

7

這將字符串轉換日期爲datetime:

"05/05/2012".to_time 
+14

這是一個Ruby on Rails方法,而不是Ruby方法。 – JackCA 2012-06-19 06:14:18

+0

雖然這不是這個問題的答案,但它幫助了我一大堆。謝謝@ user1425976 – karlingen 2014-11-26 20:47:59

30

我已經成功與:

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

很好的答案! :) – 2017-11-14 05:57:40

12

我用Time.parse("02/07/1988"),像一些其他的海報。

一個有趣的問題是,當我打開IRB時默認加載了Time,但未定義Time.parse。我不得不require 'time'才能正常工作。

這是與Ruby 2.2。

4

爲中國Rails開發者:

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