C# 作为本地时间进行解析会添加额外的偏移量,即使指定DateTimeStyles.AssumeLocal也是如此

C# 作为本地时间进行解析会添加额外的偏移量,即使指定DateTimeStyles.AssumeLocal也是如此,c#,.net,datetime,timezone,C#,.net,Datetime,Timezone,我想问我的用户一个时间,在他们当地的时区和工作。然而,它似乎将时间输入视为UTC,并将偏移量添加到我的本地时区(BST),即使我指定了AssumeLocal: 调试器中的“2017-4-1-1200”=>FromTime={01/04/2017 13:00:00}。 为什么让.Net将我输入的时间视为本地时间并不琐碎,我应该怎样做才不会大惊小怪,我在这里误解了什么?问题是输入字符串的格式 这将为您提供UTC时间: var input = Console.ReadLine("Enter a ti

我想问我的用户一个时间,在他们当地的时区和工作。然而,它似乎将时间输入视为UTC,并将偏移量添加到我的本地时区(BST),即使我指定了
AssumeLocal

调试器中的“2017-4-1-1200”=>
FromTime={01/04/2017 13:00:00}


为什么让.Net将我输入的时间视为本地时间并不琐碎,我应该怎样做才不会大惊小怪,我在这里误解了什么?

问题是输入字符串的格式

这将为您提供UTC时间:

var input = Console.ReadLine("Enter a time in format yyyy-mm-dd-hhmm");
var FromTime = DateTime.Parse(input, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
这将为您提供本地时间(注意,我将hypen更改为空格,并将“1200”更改为“12:00”):

我不确定哪种格式包含分隔日期和时间的连字符以及不带冒号的时间。但显然.NET将其解释为UTC日期/时间表达式

您可以使用
ParseExact
绕过此问题:

var input = "2017-12-31 12:00";
var fromTime = DateTime.Parse(input, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
Console.WriteLine(String.Format("Result: {0:yyyy-MM-dd HH:mm:ss}", fromTime));
//outputs 2017-12-31 12:00

你在哪里找到这种格式的?使用“2017-4-1 12:00”。
var input = "2017-12-31 12:00";
var fromTime = DateTime.Parse(input, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
Console.WriteLine(String.Format("Result: {0:yyyy-MM-dd HH:mm:ss}", fromTime));
//outputs 2017-12-31 12:00
string input = "2017-12-31-1200";
var fromTime = DateTime.ParseExact(input, "yyyy-MM-dd-HHmm",CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
Console.WriteLine(String.Format("Result: {0:yyyy-MM-dd HH:mm:ss}", fromTime));
//outputs 2017-12-31 12:00:00