我如何在 rails 中保存时间或日期时间时提及要扣除的特定偏移量?
how can i menction specific offset to be deducted while saving times or datetime in rails?
我有一个 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
然后上面的逻辑在数据库中得到 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
现在我在import
出勤中面临time_zone
问题,其中一个人填写employee
check-in
,out times
在spreadsheet
并上传。在 excel
sheet 中使用的 format
是 09:30 am
.
所以我在这里使用以下逻辑将其转换为 datetime
。
irb(main):004:0> "09:30 am".to_datetime
=> Mon, 07 Nov 2016 09:30:00 +0000
在这种情况下,不会扣除偏移量 (05:30)。这种情况下offset是怎么扣除的?
你不是在比较同类。
在第一种情况下你正在做:
record.check_in.in_time_zone(record.time_zone)
它正在获取记录的日期时间对象(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
我有一个 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
然后上面的逻辑在数据库中得到 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
现在我在import
出勤中面临time_zone
问题,其中一个人填写employee
check-in
,out times
在spreadsheet
并上传。在 excel
sheet 中使用的 format
是 09:30 am
.
所以我在这里使用以下逻辑将其转换为 datetime
。
irb(main):004:0> "09:30 am".to_datetime
=> Mon, 07 Nov 2016 09:30:00 +0000
在这种情况下,不会扣除偏移量 (05:30)。这种情况下offset是怎么扣除的?
你不是在比较同类。
在第一种情况下你正在做:
record.check_in.in_time_zone(record.time_zone)
它正在获取记录的日期时间对象(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