我目前正在开发一个dotnet core 3.0应用程序,该应用程序需要将不同的datetime字符串解析为System.DateTime。我的开发环境是Windows 10上的VS2019,但该应用程序稍后将在Raspbian(debian-arm)上运行。让我们看一下这个示例代码:
// input string
const string testdate = "Jan. 1 01:05:26";
var dateFormats = new[] { "MMM. d HH:mm:ss", "MMM. dd HH:mm:ss" };
var dateTime = DateTime.ParseExact(testdate, dateFormats, CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal);
// output should be: 01.01.2020 01:05:26
Console.WriteLine($"Date: {dateTime.ToString("dd.MM.yyyy HH:mm:ss")}");
虽然这可以在Windows 10下的开发中按预期工作,但它将在raspbian上引发异常:
System.FormatException: String 'Jan. 1 01:05:26' was not recognized as a valid DateTime.
我已经检查了CultureInfo,但是两个系统都设置为同一系统。我在这里想念什么吗?我如何确保这些日期时间在树莓派上正确解析?
更新:
我只是注意到日期的年份部分丢失了。这是该例外的原因吗?但是为什么要在Windows上运行并假设当前年份呢?
解:
正如nl-x建议的那样,我尝试打印格式化为我输入的日期格式的当前日期时间。在那里:
DateTime.Now.ToString("MMM. d HH:mm:ss")
// Windows output: Jan. 2 16:29:45
// Raspbian output: Jan.. 2 16:29:45
显然,Raspbian已经以“ MMM”格式包含了结尾点,而Windows没有。将我的日期格式更改为:
var dateFormats = new[] { "MMM. d HH:mm:ss", "MMM. dd HH:mm:ss", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" };
现在可以在Windows和Linux中使用。谢谢!
尝试使用不变文化,或明确设置文化。
您的本地系统可能以与Linux系统不同的语言运行。
本地系统上的“ Jan”是什么,在Linux系统上可能有所不同。
尝试从Linux上以当前格式打印日期,看看它是否对“ Jan” EG使用了其他格式 dateTime.Now.ToString("MMM. d HH:mm:ss", "MMM. dd HH:mm:ss")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句