В вашем вопросе вы указали два совершенно разных времени сервера.Они не ссылаются на один и тот же фактический момент времени.В каждом случае 01:39:34
- это местное время в указанном смещении часового пояса.
2019-05-20T01:39:34-04:00 (EDT) = 2019-05-20T05:39:34Z (UTC) = 2019-05-20T11:09:34+05:30 (IST)
2019-05-20T01:39:34+05:30 (IST) = 2019-04-19T20:09:34Z (UTC) = 2019-04-19T16:09:34-04:00 (EDT)
Как видно из сравнения времени UTC, разница составляет 9,5 часамежду этими двумя временными метками.Это также отражается в разнице между двумя смещениями (5.5
- -4
= 9.5
).
Это распространенный источник путаницы, так как часто люди видят +
или -
подписать как оператор и, таким образом, воспринимать его как инструкцию («О, я вижу плюс или минус, поэтому мне нужно добавить или вычесть это значение, чтобы добраться до местного времени»).Но на самом деле это не оператор, а знак смещения.Положительные значения смещения опережают UTC, а отрицательные значения смещения находятся за UTC.(В качестве альтернативы можно рассматривать положительные смещения как к востоку от GMT, а отрицательные смещения к западу от GMT.)
Другими словами, часть даты и времени ISO 8601 отформатированные временные метки уже преобразованы в предоставленный контекст.
Также обратите внимание, что часовой пояс вашего сервера на самом деле не имеет значения, и не должен.Сейчас это сейчас - часовые пояса не меняют это .Таким образом, в большинстве случаев вы должны просто использовать время UTC.