查看我用于将墨西哥日期和时间转换为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);
答案 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。有几种方法可以做到这一点:
也许你想做的就是通过调用ConvertTime
或ConvertTimeByTimeZoneId
在两个时区之间进行转换。
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