问题在于输入字符串的格式。
这将为您提供 UTC 时间:
var input = "2017-12-31-1200";
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 05:00:00 for me
这将为您提供当地时间(注意我将连字符更改为空格并将“1200”更改为“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
我不确定哪种格式包含分隔日期和时间的连字符以及不带冒号的时间。但显然 .NET 将此解释为 UTC 日期/时间表达式。
您可以使用ParseExact 解决此问题:
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