你可能会告诉我,还有另一个像我一样的类似问题。 我发现的唯一一个有点相同的线程是:
DateTime values read wrongly from Database
同样的事情也发生在我身上。
我们公司管理着全州的网络应用程序。我们位于“总部”,多个应用程序服务器连接到一个运行 SQL SERVER 2014 的数据库服务器。
用户必须保存学生的出生日期,例如2008-10-03。没有设置时间,因此应该保存 00:00:00.000。该应用程序是用 C# 编写的,使用 EntityFramework 作为数据库连接。
并非所有记录都保存错误,但其他记录保存如下:2008-10-02 22:00:00.000。少了两个小时,因此,今天不再是同一天。
出生日期是一个日期时间字段。我怎样才能让这个东西正常工作?我应该使用日期时间偏移吗?
非常感谢您抽出宝贵的时间,我真的希望您能帮助我。谢谢!
编辑
发生这种情况的代码如下:
public saveData (DateTime birthdate, int studentId){
using(Entities DB = new Entities()){
student myStudent = findStudent(studentId);
myStudent.birthDate = birthdate;
DB.SaveChanges();
}
}
正如我所说,我正在使用 Entity Framework 。
我们有一个网络部门,他们给了我们多个虚拟应用服务器,所以我无法告诉你机器所在的区域,因为我们无法识别哪个服务器是保存信息(也许如果我们这样做,会对我们有所帮助)。
这有点尴尬,但考虑到所有这些方面,我对 DateTime 没有太多经验。如何确保我的日期时间被视为 UTC/Zulu?
感谢您的快速回复
请您参考如下方法:
创建日期时间时指定 UTC,以便无论计算机驻留在何处(时区),所有计算都会标准化。
DateTime(year: 2008, month: 10, day: 3,
hour: 0, minute: 0, second: 0,
kind: DateTimeKind.Utc)
但是,由于此日期可能源自用户界面,因此您可能正在使用字符串,因此您可以使用 DateTimeStyles 标志来解析日期。
使用时间 00:00:00Z
强制使用 UTC 日期
var utc = DateTime.Parse("2008-10-03T00:00:00Z", null,
System.Globalization.DateTimeStyles.AdjustToUniversal)
没有时间也可以
var utc = DateTime.Parse("2008-10-03", null,
System.Globalization.DateTimeStyles.AdjustToUniversal)
现在保留 UTC 日期时间
saveData(utc, studentId)