C# : how to stop timezone offset being added to System. DateTime 插入 DateTimeOffset SQL Server 列时

标签 c# sql-server timezone-offset datetimeoffset

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

导入到我的 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/

相关文章:

c# - 我的 C# 应用程序如何测试用户是否具有 "Read"网络共享访问权限?

sql-server - 如何仅可视化层次结构中节点的后代、祖先和自身?

php - date() 和夏令时的问题

timezone - 无论我的时区偏移量如何,convert_timezone 'America/New_York' 都会起作用吗?

c# - 如何使用 C# .NET 'Mark as read ' GMail 的邮件?

c# - 在 gridview 中选择一行,然后将所选行传递到另一个页面

c# - 从未通过 C# 注册的 C++ COM 服务器访问 COM 接口(interface)

sql - 从 SQL SERVER 中的 3 个值中获取较低的值

sql-server - 添加队列时出现 WSO2 消息代理错误 - 对象名称无效

javascript - 时区偏移显示不正确的日期和时间