2017-07-28 54 views
0

兩組數據的紅寶石時區的處理需要進行合併,以創建一個新的DateTime對象合併數據時

def mergeDateTime(date_to_merge, time_to_merge) 
    DateTime.new(date_to_merge.year, date_to_merge.month,date_to_merge.day, time_to_merge.hour, time_to_merge.min, time_to_merge.sec) 
end 

查詢@signature = Signature.where('playtime_id = ?', 514).first 回報

Signature id: 834,[...], created_at: "2017-06-27 05:16:52" 

和查詢@interruption = Interruption.where('playtime_id = ?', 514).first 回報

Interruption id: 190, [...], pause: "2017-06-27 06:46:19" 

bu牛逼運行

mergeDateTime(@signature.created_at, @interruption.pause) 

回報

Tue, 27 Jun 2017 08:46:19 +0000 

這是不對的,因爲它解釋了數據在北京時間而且應該產生

Tue, 27 Jun 2017 06:46:19 +0000 

如何調整時區的這一假設進行結紮?根據date_to_merge日期,是否考慮了時區的偏移量?

回答

0

Specify the timezonein_time_zone

def mergeDateTime(date_to_merge, time_to_merge) 
    date_to_merge = date_to_merge.in_time_zone('UTC') 
    time_to_merge = time_to_merge.in_time_zone('UTC') 
    DateTime.new(
    date_to_merge.year, 
    date_to_merge.month,date_to_merge.day, 
    time_to_merge.hour, 
    time_to_merge.min, 
    time_to_merge.sec 
) 
end 
+0

這是返回完全相同的結果'2017年6月27日星期二08:46:19 UTC +00:00' – Jerome

+0

關閉。功能性答案是調用要處理的對象的時區:'mergeDateTime(@ signature.created_at,@interrupt.pause.in_time_zone('UTC'))' – Jerome

+0

已更新答案以反映@Jerome – anothermh

0

雖然在正確方向的另一答案要點,轉化爲UTC的時刻事項

ts_pause_raw = @interruption.pause.in_time_zone('UTC') 
ts_pause = Time.parse(ts_pause_raw.to_s[11,8]) 

然後def mergeDateTime(date_to_merge, time_to_merge)可以稱爲不in_time_zone的進一步調用。

發生之後,已經太晚了。