C#:当插入DateTimeOffset SQL Server列时如何停止将时区偏移添加到System.DateTime中

问题描述 投票:0回答:2

我有一些C#代码,可从一个数据库复制行并将其插入另一个数据库。它使用DataTableSqlBulkCopy执行此操作。

当导入到我的C#应用​​程序中时,时间戳列在插入到SQL Server的System.DateTime中具有数据类型DataTable。执行SqlBulkCopy.WriteToServer()后,目标表中的时间戳记值将具有datetimeoffset(6)类型,并为其添加时区偏移量(... +01:00)。

如何阻止这种情况发生?它并不总是发生,只是最近才开始发生。

UPDATE:

出于我的目的,预期的时区始终是UTC。但是,由于商业原因,我不得不将此存储在datetimeoffset列中。所以我希望+00:00

DataTable data = importer.GetDataTable();

using (SqlBulkCopy copy = new SqlBulkCopy(conn)){
   copy.WriteToServer(data);
}
c# sql-server timezone-offset datetimeoffset
2个回答
1
投票
https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-datetime-and-offset提供了有关如何在两者之间进行转换的几个示例。请注意,SpecifyKind不需要具有DateTimeOffset类型。

0
投票
我通过将System.DateTime列转换(广播)为具有DateTimeOffset的显式偏移的new TimeSpan(0, 0, 0)来解决此问题。这消除了C#隐式处理从DateTimeDbType.DateTimeOffset的转换的需要,该转换增加了不希望的偏移量。

编辑

[阅读评论,@ JohnSkeet本质上建议这样做,但我没有阅读所有人的评论

© www.soinside.com 2019 - 2024. All rights reserved.