2016-11-07 81 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

相关问题