2017-01-30 15 views
0

基本上我只是試圖通過帶有unix時間戳的csv進行篩選,並且不知道在查看本網站上的其他解決方案時發生了什麼問題。在Unix中將Unix Timestamp轉換爲標準時間,但在控制檯中出現奇怪錯誤

錯誤

csv_parsing.rb:13:在`在':不能轉換成字符串的確切數量(類型錯誤)

我unix_timestamps_array變量是unix的時間戳例如構成字符串的數組「1237178109」但不想附加csv。我可以確認,在7之前,我得到了終端中unix時間戳的數組。

require 'csv' 
require 'date' 

csv = CSV.read('sample_data.csv', headers: true) 

unix_time_str_array = csv['created_at'] 

unix_time_int_array = unix_time_str_array.map {|e| e.to_i } 

converted_time = unix_time_int_array.each {|timestamp| Time.at(timestamp)} 

p converted_time 
+0

注意到我知道Time.now,但是這因爲我正在讀的有點不同從文件等 – cristodagama

+0

nvm案件關閉。 #每個需要#map來獲取utc時間。也許有人可以解釋細微差別?我知道每個迭代遍歷數組中的每個元素,並且是循環的ruby方式,map將塊的邏輯應用到數組的每個元素並輸出一個新數組。爲什麼沒有第一個案件工作? – cristodagama

+1

儘管在塊中發生了什麼,每個都會返回最初的集合,而'map'返回修改後的集合 –

回答

2

你需要傳遞一個Numeric實例,而不是字符串:

Time.at("1237178109") 
#=> TypeError: can't convert String into an exact number 

Time.at(1237178109) 
#=> 2009-03-16 06:35:09 +0200 
+0

我的感覺可能是這種情況......謝謝! – cristodagama

+0

我的輸出仍然沒有將10位數unix時間戳轉換爲utc標準。生病編輯上面,我目前有什麼...... – cristodagama

+0

@cristodagama顯示你所得到的和所需的輸出 –