C#如何将UTC日期时间转换为墨西哥日期时间

时间:2017-01-25 13:49:28

标签: c# datetime timezone utc

查看我用于将墨西哥日期和时间转换为UTC日期和时间的代码。

    string strDateTime = "25/01/2017 07:31:00 AM";
    DateTime localDateTime = DateTime.Parse(strDateTime);
    DateTime univDateTime = localDateTime.ToUniversalTime();

ToUniversalTime返回UTC 25-01-2017 02:01:00

当我再次尝试将相同的UTC日期和时间UTC 25-01-2017 02:01:00转换为墨西哥当地时间时,我得到24-01-2017 06:01:00

所以请看07:31:00 AM becomes 06:01:00哪个不对。所以告诉我我的代码中缺少什么,当我使用时区信息从utc转换到墨西哥时间时,我错误的当地时间。

请参阅我的代码,该代码使用时区信息从utc转换为墨西哥当地时间。

    string strDateTime = "25-01-2017 02:01:00";
    DateTime utcDateTime = DateTime.Parse(strDateTime);
    string nzTimeZoneKey = "Pacific Standard Time (Mexico)";
    TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey);
    DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone);

3 个答案:

答案 0 :(得分:2)

好的,我不知道你是否位于印度 - 这会改变一些事情:

您可能希望将TimeZoneInfo.ConvertTime() API用于此..可能类似于:

    var dt = new DateTime(2017, 01, 25, 7, 31, 0).ToUniversalTime();
    var nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time (Mexico)");
    //var ist = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
    DateTime nzDateTime = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Utc, nzTimeZone);

答案 1 :(得分:2)

您当前所在的时区(UTC+05:30)与您要转换为(UTC-8:00)的时区不同。所以你得到了不同。从原始时区到目标时区有大约13小时30分钟的差异。 5:30 - (-8) = 13:30

从原始日期减去13小时30分钟,然后获得18:01:00,其中12小时格式为前一天的6PM

编辑:

除了对墨西哥时区进行硬编码外,您还需要一种方法来确定用户的时区,无论他们来自哪里。最好使用this answer中列出的JavaScript。

答案 2 :(得分:1)

您的问题是Parse完成时没有指定它来自的时区 - 因此系统将使用您计算机的默认值。您的计算机似乎不在PST中。而是在印度的某个地方。

因此,在将其转换为DateTime对象后,您需要通过指定PST时区将其转换为UTC。有几种方法可以做到这一点:

  1. 指定时区偏移量作为字符串的一部分。
  2. 调用其中一个TimeZoneInfo.ConvertTimeToUtc并指定timezoneid
  3. 也许你想做的就是通过调用ConvertTimeConvertTimeByTimeZoneId在两个时区之间进行转换。

    
        string pst = "Pacific Standard Time";
        TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, pst));
    

    例如:太平洋标准时间上午7:30应该是1:30 UTC - 而不是2:30。这表明初始转换中存在问题。 UTC时间凌晨2点确实是下午6点。另外我注意到你的输入是7:31并且你声称它输出2:01 - 墨西哥做30分钟的时区吗?我知道印度的确如此。

    我使用Google通过字面搜索“2:01 UTC到PST”来测试转换,然后返回答案进行比较。

    请参阅此另一篇文章,其中显示了解析分析的输入时区。如上所述,不需要转换为DST。 Does ConvertTimeFromUtc() and ToUniversalTime() handle DST?

    有关TimeZoneInfo的MSDN的更多信息:https://msdn.microsoft.com/en-us/library/bb495915(v=vs.110).aspx