#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. Спасибо! Я был очень смущен.