Если предположить, что метка времени указана в миллисекундах, то 1586653140000 равно
Epoch: 1586653140
GMT: Sunday, April 12, 2020 12:59:00 AM
PDT: Saturday, April 11, 2020 17:59:00 PM -in time zone America/Los Angeles
Это всего лишь 3 различных способа обращения к конкретному c моменту времени во всем мире. Сб, 11 апреля 2020 20:59:00 PDT -07: 00 и 2020-04-11 20:59:00 -0400 каждый относится к разным моментам времени, а не к эпохе (1586653140)
Поскольку Unix эпоха (или Unix время, или время POSIX, или Unix отметка времени) - это количество секунд, прошедших с 1 января 1970 года (полночь UTC / GMT), не имеет смысла брать 1586653140
и измените только часовой пояс, не добавляя смещение зоны, потому что теперь вы говорите о другом моменте времени.
Чтобы получить правильный «перевод» из эпохи в любой часовой пояс, вы можете просто сделать
Time.zone = "GMT"
Time.zone.at(1586653140)
=> Sun, 12 Apr 2020 00:59:00 GMT +00:00
Time.zone = "America/Los_Angeles"
Time.zone.at(1586653140)
=> Sat, 11 Apr 2020 17:59:00 PDT -07:00
При работе с датами в часовых поясах в рельсах важно использовать только функции, учитывающие установленный часовой пояс:
НЕ ИСПОЛЬЗОВАТЬ
- Time.now
- Date.today
- Date.today.to_time
- Time.parse ("2015-07-04 17:05:37")
- Time.strptime (строка, "% Y-% m-% dT% H:% M:% S% z")
DO USE
- Time.current
- 2.hours.a * 1 063 *
- Time.zone.today
- Date.current
- 1.day.from_now
- Time.zone.parse ("2015-07- 04 17:05:37 ")
- Time.strptime (строка,"% Y-% m-% dT% H:% M:% S% z "). In_time_zone
Также следует помнить, что в приложении Rails у нас есть три разных часовых пояса:
- системное время,
- время приложения и
- время базы данных.
Эта запись от mindbot объясняет все ясно.