Dart中DateTime指定日期与DateTime.now()时区偏移不一致问题
问题解答:Dart DateTime时区偏移差异原因
这是因为**夏令时(Daylight Saving Time, DST)**的影响,具体解释如下:
DateTime.now()返回当前系统的实时时间,若当前处于夏令时生效时段(比如北美东部时区的EDT时段,UTC偏移为-4小时),输出的时区偏移就是-4:00:00.000000。DateTime(2021)默认创建的是2021年1月1日00:00:00的时间,而1月属于该时区的非夏令时时段(比如北美东部时区的EST时段,UTC偏移为-5小时),因此时区偏移为-5:00:00.000000。
你可以通过指定夏令时生效的月份验证这个逻辑,比如修改代码:
void main() { print('OFFSET: ${DateTime.now().timeZoneOffset}'); print('OFFSET2: ${DateTime(2021).timeZoneOffset}'); print('OFFSET3: ${DateTime(2021, 7).timeZoneOffset}'); // 7月处于夏令时时段 }
此时OFFSET3的输出会和OFFSET一致,因为7月是夏令时生效的月份。
Dart的DateTime.timeZoneOffset并非返回固定的时区偏移,而是根据具体日期是否处于夏令时时段,返回对应时段的UTC偏移值。
内容的提问来源于stack exchange,提问作者Grey
相关产品推荐
相关产品推荐

