2013-05-02 15 views
8

我從一個大的CSV文件,它看起來像這樣拉日期時間字符串:紅寶石:如何從一個日期 - 時間字符串中提取一個小時(或天)

"11/19/2008 21:56" 

我想只提取小時,所以我可以建立所有小時的直方圖以找到最常見的小時。同樣,我想從日期中提取一週中的天數(名稱),並創建最常見日期的直方圖。

我是新來的Ruby,擡起頭來的信息,對於初學者嘗試過各種形式的以下的,但沒有運氣:

require 'date' 
puts DateTime.strptime("11/19/2008 21:56", '%I') 

能否請您指教一個簡單的(明確)的方式來完成以上?此外,如何表示結果的任何建議都會很好。我正在考慮一個哈希數組(24個條目)和一個數字(7個條目)?在迭代日期 - 時間字符串時,將最新的算法加載到最新的算法中,然後可能會將它們重新排列在最常見的頂部?謝謝!!

+0

是否需要按照這種方式格式化日期時間字符串?或者你可以使用其他格式? – 2013-05-02 01:10:16

+0

因爲我在這裏瀏覽了Ruby文檔:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html,並沒有發現接受該格式的內容。 – 2013-05-02 01:14:14

+0

是的,這是它從提供的CSV文件進入的方式 – pete 2013-05-02 02:37:13

回答

12

這是起點:

dt = "11/19/2008 21:56" 
require 'date' 
DateTime.strptime(dt, '%m/%d/%Y %H:%M') # => #<DateTime: 2008-11-19T21:56:00+00:00 ((2454790j,78960s,0n),+0s,2299161j)> 

種日期格式,如「11/19/2008」在解析時,因爲默認情況下使用這種格式存在問題:

'%d/%m/%Y' 

日期鼓起時,看到的19一個月值。 '%m/%d/%Y'並不像'%d/%m/%Y'那樣在世界各地流行,這就是爲什麼Ruby默認使用它。從0..6,不1..7,其中0 = Sunday

datetime = DateTime.strptime(dt, '%m/%d/%Y %H:%M') 
datetime.hour # => 21 
datetime.wday # => 3 

注意wday返回值:

%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday][datetime.wday] 
# => "Wednesday" 

Rails的的ActiveSupport

一旦時間戳解析,您可以輕鬆地從中提取部分作爲Date,DateTime和Time支持的一部分,有很多useful methods。使用它們很容易,如果你決定將它們添加到普通的Ruby代碼中,就很容易挑選你想要的。

1
"11/19/2008 21:56".split[1] 
=> "21:56" 

如果可以在其他格式,但始終與只有一部分「:」和每側的兩個數字,你可以使用

"11/19/2008 21:56"[/\d{2}:\d{2}/] 
=> "21:56" 

而對於一天,類似的東西

"11/19/2008 21:56"[/\d{2}\/\d{2}\/\d{4}/] 
=> "11/19/2008" 
相關問題