c# - 为什么我从 C# 发送的 DATETIME 值存储在 SQL Server 中,相差一天/小时?

标签 c# entity-framework datetime sql-server-2014

你可能会告诉我,还有另一个像我一样的类似问题。 我发现的唯一一个有点相同的线程是:

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)

关于c# - 为什么我从 C# 发送的 DATETIME 值存储在 SQL Server 中,相差一天/小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892973/

相关文章:

c# - WCF WSDL 只提供复杂的类型/方法

viewbox 中的 C# wpf 控件,但无法获得实际大小

安哥拉的 C# 文化名称?

c# - 链接我的实体结果的错误做法

c# - EntityFramework Core - 复制实体并将其放回数据库

python - 使用 Python3 检测日期格式并将它们转换为 MM-DD-YYYY

javascript - 如何将 24 小时添加到 javascript 的 datetime 对象

c# - 在.Net 2.0 的另一个线程中加载表单?

c# - Distinct 子句导致类型错误

python - 问题拆分日期时间 - 'str' 对象没有属性 'strptime'