Dart计算UTC时间与当前时间分钟差出现1小时偏差问题求助
Dart时间差计算多出一小时的问题解决
问题根源:DateTime.parse解析不带时区标识的时间字符串时,默认会将其识别为本地时区时间。你从API获取的是UTC时间,但解析时被当成了GMT+1的本地时间,导致与真实UTC时间存在1小时的偏差,最终计算出的差值多了60分钟(加上原本的11分钟,得到71分钟)。
从你的输出能验证这一点:
chkDate输出2024-04-20 23:10:06.000(无Z标识,是本地时间),对应UTC时间为2024-04-20 22:10:06Znow是UTC时间2024-04-20 23:21:11.578Z- 两者差值为
23:21 - 22:10 = 71分钟,和你得到的结果一致。
解决方法:
将API返回的UTC时间字符串解析为UTC时间,而非本地时间,有两种实现方式:
- 在时间字符串末尾添加
Z标识(UTC时间的标准标识),再用DateTime.parse解析:
DateTime chkDate = DateTime.parse("2024-04-20 23:10:06Z");
- 若能拆分时间的年、月、日、时、分、秒,直接用
DateTime.utc构造UTC时间:
DateTime chkDate = DateTime.utc(2024, 4, 20, 23, 10, 6);
修改后的完整代码:
void main() { DateTime chkDate = DateTime.parse("2024-04-20 23:10:06Z"); DateTime now = DateTime.now().toUtc(); final difference = now.difference(chkDate).inMinutes; print(chkDate); print(now); print(difference.toString()); }
运行后,chkDate会输出2024-04-20 23:10:06.000Z,此时和now的UTC时间计算出的差值就是实际的分钟差(示例中约11分钟,若调整时间完全匹配则为1分钟)。
内容的提问来源于stack exchange,提问作者StripyTiger
相关产品推荐
相关产品推荐

