我试图将此字符串时间值2017-01-10T13:19:00-07:00转换为本地时间(东方)。现在从我的研究中,07:00是Mountain Time,它是Eastern Time (我的本地)的两个小时。但是,当我运行这个语法来转换返回的输出时,01/17/2017 10:19:00 AM是3小时差,而不是2。
这是我使用的语法,这是错误的设置吗?为了从协调世界时返回准确的本地时间,我应该改变什么?
static void Main(string[] args)
{
string green = "2017-01-10T13:19:00-07:00";
DateTime iKnowThisIsUtc = Convert.ToDateTime(green);
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
iKnowThisIsUtc,
DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
Console.WriteLine(localVersion);
Console.ReadKey();
}编辑
我已经验证了我的计算机被设置为正确的时区,使用以下语法为两者生成东方(这是正确的)
TimeZone zone = TimeZone.CurrentTimeZone;
string standard = zone.StandardName;
string daylight = zone.DaylightName;
Console.WriteLine(standard);
Console.WriteLine(daylight);发布于 2017-01-20 14:26:02
将字符串转换为DateTime对象:
var datetime = DateTime.Parse("2017-01-10T13:19:00-07:00");获取EST的时区:
var easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");转换为EST (注意转换.ToUniversalTime()):
var easternTime = TimeZoneInfo.ConvertTimeFromUtc(datetime.ToUniversalTime(), easternZone);easternTime.ToString();输出
2017年01月10日15:19:00
(我在英国,所以你的dd/MM/yyyy,你的可能会有不同的表现)
发布于 2017-01-20 21:50:15
// your input string
string green = "2017-01-10T13:19:00-07:00";
// parse to a DateTimeOffset
DateTimeOffset dto = DateTimeOffset.Parse(green);
// find the time zone that you are interested in.
// note that this one is US Eastern time - inclusive of both EST and EDT, despite the name.
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
// convert the DateTimeOffset to the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(dto, tzi);
// If you need it, you can get just the DateTime portion. (Its .Kind will be Unspecified)
DateTime dtEastern = eastern.DateTime;发布于 2017-01-20 14:28:53
当您的应用程序需要明确地了解时区时,您可能需要考虑使用DateTimeOffset而不是DateTime。
在DateTime、DateTimeOffset、TimeSpan和TimeZoneInfo之间进行选择
这个问题看上去像是有人收集了很多关于拓扑- 夏令时及时区最佳做法的最佳实践。
https://stackoverflow.com/questions/41765542
复制相似问题