我有一些 C# 代码,可以从一个数据库复制行并将其插入到另一个数据库中。它使用 DataTable
和 SqlBulkCopy
来完成此操作。
导入到我的 C# 应用程序中时,时间戳列在插入 SQL Server 的 DataTable
内具有数据类型 System.DateTime
。执行 SqlBulkCopy.WriteToServer()
后,目标表内的时间戳值将具有 datetimeoffset(6)
类型,并添加时区偏移量 (... +01 :00)。
如何阻止这种情况发生?这种情况并不总是发生,只是最近才开始发生。
更新:
出于我的目的,预期的时区始终是 UTC。但是,出于业务原因,我被迫将其存储在 datetimeoffset 列中。所以我期待 +00:00
DataTable data = importer.GetDataTable();
using (SqlBulkCopy copy = new SqlBulkCopy(conn)){
copy.WriteToServer(data);
}
最佳答案
如果您有一个 DateTime
并尝试将其写入 DateTimeOffset
,C# 必须找出要使用的时区。有显式转换函数允许您指定,但如果您不指定,它将假定 DateTime
位于本地时区(大多数情况下都是如此)。
https://learn.microsoft.com/en-us/dotnet/standard/datetime/converting-between-datetime-and-offset提供了有关如何在两者之间进行转换的几个示例。请注意,SpecifyKind
不需要具有 DateTimeOffset
类型。
关于C# : how to stop timezone offset being added to System. DateTime 插入 DateTimeOffset SQL Server 列时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326636/