【问题标题】:Unable to Convert DateTime value to UTC无法将 DateTime 值转换为 UTC
【发布时间】:2016-12-08 03:12:28
【问题描述】:

我正在尝试从数据库中获取数据并使用 C# 将日期时间值转换为 UTC

我试过了,还是不行。

foreach (GrJscMstr gjm in grJscMstrs)
                {
                    gjm.gr_sch_date = DateTime.SpecifyKind(gjm.gr_sch_date, DateTimeKind.Utc);
                }

然后,我尝试了这个,它也不起作用:

foreach (GrJscMstr gjm in grJscMstrs)
                {
                    gjm.gr_sch_date = new DateTime(gjm.gr_sch_date.Year, gjm.gr_sch_date.Month, gjm.gr_sch_date.Day, 0, 0, 0, DateTimeKind.Utc);
                }

然后我将我的代码修改为运行良好的代码。

foreach (GrJscMstr gjm in grJscMstrs)
                {
                    gjm.gr_sch_date = new DateTime(gjm.gr_sch_date.Year, gjm.gr_sch_date.Month, gjm.gr_sch_date.Day, 0, 0, **1**, DateTimeKind.Utc);
                }

我需要知道为什么。这对我来说没有任何意义。 DateTime.SpecifyKind(gjm.gr_sch_date, DateTimeKind.Utc); 应该可以正常工作。

【问题讨论】:

  • gr_sch_date 是什么类型的?
  • gjm.gr_sch_date 是本地时区的 DateTime 值吗?如果是这样,请尝试使用TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(gjm.gr_sch_date.Date, DateTimeKind.Local))。如果未指定日期,请改用DateTimeKind.Unspecified。如果您只是将时区重新配置为 UTC,AFAIK,DateTime.SpecifyKind(gjm.gr_sch_date, DateTimeKind.Utc) 将在不使用时区差异的情况下转换为 UTC。
  • 那些是非常命名的变量和类。
  • @CodingYoshi 日期时间
  • @Kinetic 我知道!但是,遗留代码。在这儿无事可做。 :-(

标签: c# json datetime utc


【解决方案1】:

Lonely Planeteer 没有具体说明“不工作”的含义。下面的示例演示了如何通过使用 Lonely Planeteer 所需的语法来更改 DateTime 的类型。也许这个完整的工作示例将使 Lonely Planeteer 找到问题所在。

using System;

namespace StOv3
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime unspecifiedTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Unspecified);
            DateTime localTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Local);
            DateTime utcTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Utc);
            Console.WriteLine("A DateTime, unspecified whether UTC or local {0}, Kind {1}", unspecifiedTime, unspecifiedTime.Kind);
            Console.WriteLine("A local DateTime {0}, Kind {1}", localTime, localTime.Kind);
            Console.WriteLine("A UTC DateTime {0}, Kind {1}", utcTime, utcTime.Kind);
            // Attempt to redefine variables with same values;

            unspecifiedTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Unspecified);
            localTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Local);
            utcTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Utc);
            Console.WriteLine("A DateTime, unspecified whether UTC or local {0}, Kind {1}", unspecifiedTime, unspecifiedTime.Kind);
            Console.WriteLine("A local DateTime {0}, Kind {1}", localTime, localTime.Kind);
            Console.WriteLine("A UTC DateTime {0}, Kind {1}", utcTime, utcTime.Kind);

            // Attempt to change kind of variable

            unspecifiedTime = DateTime.SpecifyKind(unspecifiedTime, DateTimeKind.Utc);
            localTime = DateTime.SpecifyKind(localTime, DateTimeKind.Unspecified);
            utcTime = DateTime.SpecifyKind(utcTime, DateTimeKind.Utc);
            Console.WriteLine("A DateTime, originally unspecified whether UTC or local {0}, Kind {1}",
                unspecifiedTime, unspecifiedTime.Kind);
            Console.WriteLine("A DateTime, originally local {0}, Kind {1}", localTime, localTime.Kind);
            Console.WriteLine("A DateTime, originally UTC {0}, Kind {1}", utcTime, utcTime.Kind);

        }
    }
}

控制台输出:

日期时间,未指定是 UTC 还是本地 12/8/2016 00:00:00,种类未指定 本地 DateTime 12/8/2016 00:00:00, Kind Local A UTC DateTime 12/8/2016 00:00:00, Kind Utc 日期时间,未指定是 UTC 还是本地 12/8/2016 00:00:00,种类未指定 本地 DateTime 12/8/2016 00:00:00, Kind Local A UTC DateTime 12/8/2016 00:00:00, Kind Utc 日期时间,最初未指定是 UTC 还是本地 12/8/2016 00:00:00,Kind Utc 日期时间,最初是本地 12/8/2016 00:00:00,种类未指定 DateTime,最初是 UTC 12/8/2016 00:00:00,Kind Utc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2020-11-05
    • 2011-09-27
    • 2015-04-29
    相关资源
    最近更新 更多