2016-11-07 53 views
1

我有一個datetime專欄來存儲employeecheck-in ,out times。我在控制器動作邏輯捕捉辦理入住手續,我如何才能在軌道中節省時間或日期時間時扣除特定的偏移量?

def check_in 
@employee = current_user.employee 
punch_record = @employee.in_outs.where("date = ?", Date.today).first 
punch_record.check_in = DateTime.now 
punch_record.save 
end 
當用戶點擊 check-in

那麼上面的邏輯得到executed.And數據庫中它被扣除indian offset保存check-in,即(05:30)。並在view page,我使用in_time_zone的方法顯示check_in時間,回到indian timezone,使其加入offset(05:30)。時間正常顯示。這工作正常。

record.check_in.in_time_zone(record.time_zone).strftime(" %I:%M %P") 

這裏記錄TIME_ZONE = Mumbai

現在我面臨的time_zone問題import考勤,當一個人填補spreadsheet,並上傳了employeecheck-inout times。在excel表中使用的format09:30 am

所以我在這裏使用下面的邏輯將它轉換成datetime

irb(main):004:0> "09:30 am".to_datetime 
    => Mon, 07 Nov 2016 09:30:00 +0000 

在這種情況下,偏移量(05:30)不會被扣除。在這種情況下如何扣除偏移量?

回答

1

你不喜歡與喜歡。

在第一種情況下,你正在做的:

record.check_in.in_time_zone(record.time_zone) 

這是正在記錄的日期時間對象(上午9:30),並將其轉換爲相應的時區。

在第二種情況:

"09:30 am".to_datetime 

這是日期時間僅需設置爲上午9:30 - 你正在做什麼來轉換。

做複製在軌控制檯你的邏輯:

"09:30 am".to_datetime.in_time_zone('Kolkata') 

,你會發現你得到正確的結果。

如果「9:30」被輸入時不UTC而是代表印度本身的時間,然後將其轉換爲UTC簡單地做:

"9:30".in_time_zone('Kolkata').utc 
=> 2016-11-07 04:00:00 UTC 
+0

沒有它不工作。而不是扣除加上偏移量的偏移量。我檢查了軌道控制檯。這是輸出=>加載生產環境(Rails 4.1.5) irb(main):001:0>「09:30 am」.to_datetime.in_time_zone('Kolkata') =>星期一,2016年11月07日15: 00:00 IST +05:30 irb(main):002:0> – John

+0

是不是正確?印度不是5個半小時 - 它是+5:30 gmt。因此上午9點30分在印度下午3點。 – David

+0

默認情況下,datetime作爲UTC(當前GMT + 0)存儲在數據庫中...理想情況下,您應該將其保留爲UTC,我相信您正在做這些操作,並且在從中讀取時進行轉換(我相信您正在這樣做)。 – David

相關問題