我有一个datetime
列来存储employee
check-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
时,则执行上述逻辑。在数据库中,通过扣除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
现在我在import
考勤中面临time_zone
问题,其中一个人在spreadsheet
中填写employee
check-in
, out times
并上传。excel
表中使用的format
为09:30 am
。
所以这里我使用以下逻辑将其转换为datetime
。
irb(main):004:0> "09:30 am".to_datetime
=> Mon, 07 Nov 2016 09:30:00 +0000
在这种情况下,偏移量(05:30)不会被扣除。在这种情况下如何抵扣?
你不是在比较同类
在第一种情况下,你正在做:
record.check_in.in_time_zone(record.time_zone)
取记录的datetime对象(9:30 am)并将其转换为相关时区。
第二种情况:
"09:30 am".to_datetime
这只是将日期时间设置为上午9:30 -您没有做任何转换。
在rails控制台中复制你的逻辑:
"09:30 am".to_datetime.in_time_zone('Kolkata')
,你会发现你得到正确的结果。
如果输入的"9:30 am"不是UTC,而是印度自己的时间,那么只需执行以下操作即可将其转换为UTC:
"9:30".in_time_zone('Kolkata').utc
=> 2016-11-07 04:00:00 UTC