DateTime.fromMillisecondsSinceEpoch кажется неправильным

#dart

#dart

Вопрос:

Из документации

Построенное время даты представляет 1970-01-01T00:00:00Z миллисекунды время задержки в мс в заданном часовом поясе (локальном или UTC).

Поэтому, если мой местный часовой пояс равен 1, этот тест должен пройти —

 test('DateTime', () {
  var dt = DateTime.fromMillisecondsSinceEpoch(0, isUtc: true);
  expect(dt.toIso8601String(), '1970-01-01T00:00:00.000Z');

  var dtLocal = DateTime.fromMillisecondsSinceEpoch(0, isUtc: false);
  expect(dtLocal.toIso8601String(), '1970-01-01T00:00:00.000');
});
 

Тем не менее, он завершается с dtLocal.toIso8601String() 1970-01-01T01:00:00.000 ошибкой. Это только я или документация неясна? Я бы ожидал, что он просто изменит часовой пояс, а не миллисекунды с момента эпохи на основе местного часового пояса.

Ответ №1:

Начало эпохи — 1970-01-01T00:00:00 UTC. Начало эпохи не отличается для разных часовых поясов. Таким образом, начало эпохи в моем местном часовом поясе (EST / UTC-5) будет за 5 часов до этой даты: 1969-12-31T19:00:00.

Это именно то, что пытается сделать ваш код. dt получает время начала эпохи в UTC 0. dtLocal получает то же самое время, но помещает его в ваш часовой пояс, который, по-видимому, равен UTC 1.

Поведение, которое вы получаете, является ожидаемым.

Комментарии:

1. Спасибо! Я был очень смущен.