DateTime.ParseExact具有自定义日期格式:在Windows上有效,但在树莓派上无效

问题描述 投票:1回答:1

我目前正在开发一个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,但是两个系统都设置为同一系统。我在这里缺少什么吗?我如何确保在raspbian上正确解析这些DateTime?

更新:

我刚刚注意到日期的年份部分丢失了。这是该例外的原因吗?但是为什么它可以在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中均可使用。谢谢!

c# windows datetime .net-core raspbian
1个回答
1
投票

[尝试使用不变文化,或明确设置文化。

您的本地系统可能以与Linux系统不同的语言运行。

您的本地系统上的“ Jan”是什么,在Linux系统上可能有所不同。

尝试从Linux上以当前格式打印日期,看看它是否对“ Jan” EG dateTime.Now.ToString("MMM. d HH:mm:ss", "MMM. dd HH:mm:ss")使用其他格式>

© www.soinside.com 2019 - 2024. All rights reserved.