Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何将UTC日期时间转换为墨西哥日期时间_C#_Datetime_Timezone_Utc - Fatal编程技术网

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

C#如何将UTC日期时间转换为墨西哥日期时间,c#,datetime,timezone,utc,C#,Datetime,Timezone,Utc,请参阅我用来将墨西哥日期和时间转换为UTC日期和时间的代码 string strDateTime = "25/01/2017 07:31:00 AM"; DateTime localDateTime = DateTime.Parse(strDateTime); DateTime univDateTime = localDateTime.ToUniversalTime(); ToUniversalTimereturnUTC 25-01-2017 02:01:00 当我再次

请参阅我用来将墨西哥日期和时间转换为UTC日期和时间的代码

    string strDateTime = "25/01/2017 07:31:00 AM";
    DateTime localDateTime = DateTime.Parse(strDateTime);
    DateTime univDateTime = localDateTime.ToUniversalTime();
ToUniversalTime
return
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变为06:01:00
,这是不正确的。因此,请告诉我,当我使用时区信息从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);
请参阅我的代码,该代码使用时区信息从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);

好吧,我不知道你在印度——这稍微改变了一点:

您将要使用
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);

好吧,我不知道你在印度——这稍微改变了一点:

您将要使用
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);

当前时区
(UTC+05:30)
与转换为
(UTC-8:00)
的时区不同。所以你得到了区别。从您原来的时区到目标时区大约相差13小时30分钟<代码>5:30-(-8)=13:30

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

编辑:


您需要一种方法来确定用户的时区,而不是硬编码墨西哥时区,无论用户来自何处。这最好使用中概述的JavaScript来完成。

您当前的时区
(UTC+05:30)
与您转换为
(UTC-8:00)
的时区不同。所以你得到了区别。从您原来的时区到目标时区大约相差13小时30分钟<代码>5:30-(-8)=13:30

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

编辑:


您需要一种方法来确定用户的时区,而不是硬编码墨西哥时区,无论用户来自何处。这最好使用中概述的JavaScript来完成。

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

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

  • 指定时区偏移量作为字符串的一部分
  • 调用其中一个TimeZoneInfo.ConvertTimeToUtc并指定timezoneid
  • 也许您只需要通过调用
    ConvertTime
    ConvertTimeByTimeZoneId
    在两个时区之间进行转换

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

    我使用谷歌测试转换,逐字搜索“2:01 UTC到PST”,然后返回答案进行比较

    请参阅另一篇文章,其中显示了为解析声明输入时区。如前所述,不需要转换为DST


    有关MSDN for TimeZoneInfo的更多信息:

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

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

  • 指定时区偏移量作为字符串的一部分
  • 调用其中一个TimeZoneInfo.ConvertTimeToUtc并指定timezoneid
  • 也许您只需要通过调用
    ConvertTime
    ConvertTimeByTimeZoneId
    在两个时区之间进行转换

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

    我使用谷歌测试转换,逐字搜索“2:01 UTC到PST”,然后返回答案进行比较

    请参阅另一篇文章,其中显示了为解析声明输入时区。如前所述,不需要转换为DST


    更多关于MSDN for TimeZoneInfo的信息:

    如果我的日期时间格式错误,那么datetime解析如何解析它?如果代码运行成功,它解析得很好,但不是以您期望的方式。请查看中的日期格式-您甚至看不到您尝试使用的日期的字符串格式我执行您的代码,但我仍然得到了错误的时间,即
    06:01:00
    而不是
    07:31:00
    。如果你喜欢,我可以上传VS2013 IDE调试屏幕的屏幕截图,
    univDateTime
    的值是多少?您的本地设置是什么?25-01-2017 02:01:00存储在univDateTime变量中。我的电脑时区设置为UTC+05:30如果我的日期时间格式错误,那么datetime解析如何解析它?如果代码运行成功,它可以解析它,但不是以您期望的方式。请查看中的日期格式-您甚至看不到的字符串