DateTime.Now 和 DateTime.Today 在客户端和服务器端有两个问题。当您将 DateTime 对象从客户端传递到 Azure 时,它的 Kind 等于 Local,并且它包含时区信息。(2011 年 6 月 10 日 12:30am-7)
但是,当您将其保存到数据库时,区域信息会丢失。随后,当从数据库中读取此字段时,它会使用 Utc 区域创建 DateTime(2011 年 6 月 10 日,凌晨 12:30 0)
最终,您的客户会错误地读取日期时间。
有几个选项可以在客户端解决此问题。
1) 在方法参数和数据库中将 DateTime 转换为 DateTimeOffset。这将保证您的本地区域(即 PST)将保存在数据库中
2) 使用 DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified) - 这样 DateTime 的类型是未指定的,随后按原样保存在数据库中。
var timeNow = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
serviceClient.SaveTime(timeNow);
var dateTime = serviceClient.GetTime();
在服务器端调用 DateTime.Now 时要小心。你最好使用 DateTime.UtcNow。此时间不应用于业务数据。理想情况下,您需要重构代码并从客户端传递 DateTime 或 DateTimeOffset。