Xamarin.Forms中DateTime.Now()返回日期与系统当前日期不匹配问题
问题根因
你代码中定义的Today、TodayDate、CurrentTime均为静态字段,这类字段的赋值操作仅会在所属类第一次被程序加载访问时执行1次,之后除非应用进程重启重新加载类,否则这些字段的值不会自动更新。
仅单台设备出问题是因为该设备上的应用进程持续后台驻留了1-2天没有被销毁,类首次加载的时间为1-2天前,后续读取的都是当时缓存的旧值,自然比当前时间滞后。其余80台设备的应用进程大概率被系统自动回收过、或用户手动终止过,因此没有触发该问题。重启应用后类会重新加载,字段重新赋值为当前时间,所以问题会暂时修复,只要进程持续运行足够久,问题必然会复现。
修复方案
将静态字段改为静态只读属性,每次访问时都会实时计算当前时间,即可保证拿到的是最新时间:
public static string DateFormat = "yyyy-MM-dd HH':'mm':'ss"; public static string ShortDateFormat = "yyyy-MM-dd HH':'mm"; public static string DateOnlyFormat = "yyyy-MM-dd"; // 改为Lambda表达式定义的只读属性,每次访问实时计算 public static string Today => DateTime.Now.ToString(DateFormat); public static string TodayDate => DateTime.Now.ToString(DateOnlyFormat); public static string CurrentTime => DateTime.Now.TimeOfDay.ToString();
如果业务涉及时区统一要求,也可以将DateTime.Now替换为DateTime.UtcNow后再转换为对应时区的时间,避免设备时区变动引发的额外时间异常。
内容的提问来源于stack exchange,提问作者Pi11
相关产品推荐
相关产品推荐

