【问题标题】:How to convert datetime from SQL to UTC time in C#?如何在 C# 中将日期时间从 SQL 转换为 UTC 时间?
【发布时间】:2017-03-28 17:35:57
【问题描述】:

日期在 SQL 数据库中存储为datetime 数据类型。通过 ADO.NET 读取此日期后,如何将收到的 DateTime 转换为 UTC 时间?我的当地时间是美国东部时间。

例如,美国东部标准时间下午 1:30(存储在 SQL 数据库中)必须是世界标准时间下午 6:30。

【问题讨论】:

  • 您如何知道 SQL Server 中存储的DateTime 的时区?它可能来自多个时区。在 SQL Server 中使用DateTimeOffset
  • 我不能在 SQL 服务器中使用DateTimeOffset。但是我知道当地时间是美国东部时间。
  • 所以所有记录都有相同的时区?
  • 在数据库中是的。

标签: .net datetime utc


【解决方案1】:

如果所有记录都基于 EST 时区,那么您可以这样做:

DateTime dtFromSqlServer = new DateTime(2017,03,28); //GET field from DB
TimeZoneInfo tzInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var output = TimeZoneInfo.ConvertTimeToUtc(dtFromSqlServer, tzInfo);

【讨论】:

  • DateTime.ToUniversalTime() 也这样做吗?
  • @wonderfulworld,不... The ToUniversalTime method converts a DateTime value from local time to UTC. To convert the time in a non-local time zone to UTC, use the TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo) method.
  • @wonderfulworld,所以如果当前机器有EST有时区,那么ToUniversalTime及以上代码将返回相同,但如果机器有不同的时区,那么你会得到不同的结果。跨度>
  • 那么ToUniversalTime 查看操作系统时间?我们的 Web API 和数据库位于具有 EST 时间的服务器中。
  • @wonderfulworld,我不会使用ToUniversalTime,对机器语言环境有额外的依赖。机器语言环境可能因多种原因而改变,在这种情况下,您最终将重新编写代码。
【解决方案2】:

我过去使用过DateTime.ToUniversalTime

DateTime dateEst = new DateTime(2017, 03, 28, 1, 30, 0); // This is where you'd pulled the DateTime value from your database.
DateTime dateUtc = dateEst.ToUniversalTime();

相比之下,您可以使用DateTime.ToLocalTime 恢复原来的值。

请注意这些考虑到现在的 DST,这就是为什么这给了我 5:30,而不是 6:30...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-11-26
    • 2020-11-21
    相关资源
    最近更新 更多