You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:27:00