在设置用户的出生日期时,我得到的日期比数据库中存储的日期晚一天。
例如无名氏出生日期:1997-12-25T00:00:00+03:00
Flutter的DateTime.parse() date:1997-12-24
请帮忙!
使用本地时区的DateTime值
final datetimeParsed = DateTime.parse('1997-12-25T00:00:00+03:00').toLocal();
final DateFormat formatter = DateFormat('yyyy-MM-dd');
final String formatted = formatter.format(datetimeParsed);
print(formatted);
我最初的猜测是,时间不是从您最初存储它的时区解析出来的,也不是解析到您最初存储它的时区。parse()
函数可以接受一个可选的时区(如这里所述),所以也许可以确认时区在链的每个环节都是相同的。
另一件要考虑的事情是夏令时,因为这可能会以一种方式或另一种方式改变时间。
这些因素中的任何一个的偏移量都可能大到足以滚动到前一天或前一天。
要使Flutter将时间解析为UTC,请在末尾附加Z
,例如:
DateTime.parse(datetime + 'Z'); // UTC time
对于任何其他时间,您需要指定小时差,而不是时区,如下所示;
DateTime.parse(datetime + '+02:00'); // +2 hour difference ahead of UTC time
您还可以使用.isUTC
来检查日期是否被解释为UTC,并使用.toLocal()
来获取与UTC日期等效的本地时区。