【问题标题】:C# DateTime to UTC Time without changing the timeC# DateTime 到 UTC 时间而不更改时间
【发布时间】:2011-09-06 17:04:15
【问题描述】:

如何在不更改实际时间的情况下将预先存在的日期时间转换为 UTC 时间。

例子:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm

【问题讨论】:

  • 你在 PST 吗?你如何获得PST 值?

标签: c# datetime utc


【解决方案1】:

使用DateTime.SpecifyKind 静态方法。

创建一个新的 DateTime 对象,该对象与指定的 DateTime 具有相同的刻度数,但指定为本地时间、协调世界时 (UTC),或两者都不是,如指定的 DateTimeKind 值所示。

例子:

DateTime dateTime = DateTime.Now;
DateTime other = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);

Console.WriteLine(dateTime + " " + dateTime.Kind); // 6/1/2011 4:14:54 PM Local
Console.WriteLine(other + " " + other.Kind);       // 6/1/2011 4:14:54 PM Utc

【讨论】:

    【解决方案2】:
    6/1/2011 4:08:40 PM Local
    6/1/2011 4:08:40 PM Utc
    

    来自

    DateTime dt = DateTime.Now;            
    Console.WriteLine("{0} {1}", dt, dt.Kind);
    DateTime ut = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
    Console.WriteLine("{0} {1}", ut, ut.Kind);
    

    【讨论】:

    • 考虑到 net framework 4.8 及更早版本,存在时区错误。 Net 5.0(这是我发表此评论时的最新版本)还可以。看这里我的回答stackoverflow.com/a/69221062/6435004
    【解决方案3】:

    可以使用DateTime的重载构造函数:

    DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, DateTimeKind.Utc);
    

    【讨论】:

    • 解决方案对于 OP 的问题来说有点尴尬,但对我来说创建一个全新的 DateTime 效果很好。
    【解决方案4】:

    使用DateTime.ToUniversalTime 方法。

    【讨论】:

    • 将 dateTime 更改为晚上 11 点(我在 PST)
    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 2018-05-04
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多