Flutter使用AWS Amplify:DateTime转TemporalDate日期提前一天问题
解决AWS Amplify中TemporalDate转换日期偏移问题
这是典型的时区偏移导致的UTC与本地日期不匹配问题:TemporalDate默认基于UTC日期计算,当你的本地时区为UTC+N(比如东八区),如果选择的本地日期在当日0点到N点之间,对应的UTC日期还是前一天,直接用完整DateTime对象构造TemporalDate就会取到前一天的日期。
解决方案
直接提取本地日期的年、月、日来构造TemporalDate,避开时间和时区的干扰:
// 从选中的DateTime中提取本地年、月、日,构造TemporalDate var correctTemporalDate = TemporalDate( DateTime( pickedDate.year, pickedDate.month, pickedDate.day ) );
如果pickedDate是UTC时间,先转本地再提取:
var localPickedDate = pickedDate.toLocal(); var correctTemporalDate = TemporalDate( DateTime( localPickedDate.year, localPickedDate.month, localPickedDate.day ) );
为什么之前的代码无效
TemporalDate(pickedDate):会读取DateTime的UTC日期,本地凌晨时段的UTC日期是前一天,导致偏移。pickedDate.toUtc():直接转为UTC时间,东时区下日期必然是本地日期的前一天。pickedDate.toLocal():若pickedDate已是本地时间,此操作无意义;若为UTC转本地,时间部分仍会影响UTC日期计算。getDateTime():返回的是UTC时区的DateTime,日期依然偏移。
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

