C#如何将UTC日期时间转换为墨西哥日期时间
请参阅我用来将墨西哥日期和时间转换为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 当我再次
string strDateTime = "25/01/2017 07:31:00 AM";
DateTime localDateTime = DateTime.Parse(strDateTime);
DateTime univDateTime = localDateTime.ToUniversalTime();
ToUniversalTime
returnUTC 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。有几种方法可以做到这一点:
ConvertTime
或ConvertTimeByTimeZoneId
在两个时区之间进行转换
有关MSDN for TimeZoneInfo的更多信息:您的问题是解析是在没有指定它来自的时区的情况下完成的,因此系统将使用您计算机的默认值。您的计算机似乎不在PST中。而是在印度的某个地方 因此,在将其转换为DateTime对象后,需要通过指定PST时区将其转换为UTC。有几种方法可以做到这一点:
ConvertTime
或ConvertTimeByTimeZoneId
在两个时区之间进行转换
更多关于MSDN for TimeZoneInfo的信息:如果我的日期时间格式错误,那么datetime解析如何解析它?如果代码运行成功,它解析得很好,但不是以您期望的方式。请查看中的日期格式-您甚至看不到您尝试使用的日期的字符串格式我执行您的代码,但我仍然得到了错误的时间,即
06:01:00
而不是07:31:00
。如果你喜欢,我可以上传VS2013 IDE调试屏幕的屏幕截图,univDateTime
的值是多少?您的本地设置是什么?25-01-2017 02:01:00存储在univDateTime变量中。我的电脑时区设置为UTC+05:30如果我的日期时间格式错误,那么datetime解析如何解析它?如果代码运行成功,它可以解析它,但不是以您期望的方式。请查看中的日期格式-您甚至看不到的字符串