我如何在 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问题,其中一个人填写employeecheck-inout timesspreadsheet 并上传。在 excel sheet 中使用的 format09: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