+-
c#.net在Windows和Linux上的日期格式MMM的核心差异

我遇到了一个问题。我需要以特定格式解析日期ddMMMyy in cyrillic。当我在Windows上运行.net核心应用程序时,日期08АПР19正确地被解析为2019-04-08,但是当我在Linux服务器上解析它时抛出异常异常:字符串'08АПР19'未被识别为有效的DateTime。

代码导致异常如下:

DateTime.ParseExact(myDateVar, "ddMMMyy", CultureInfo.CreateSpecificCulture("ru-RU"));

然后我尝试在Windows和Linux上输出以下内容:

DateTime.Now.ToString("ddMMMyy", CultureInfo.CreateSpecificCulture("ru-RU"))

Windows上的输出:08апр19

和Linux:08Апр.19Linux上有一个奇怪的点

在我的理解格式中,在.net框架中硬编码,我想知道为什么它依赖于平台。所以问题是Win和Linux机器有什么区别,导致这个问题的原因是什么?

0
投票

当您调用与操作系统连接的.NET Framework(与核心相同)中的任何命名空间的函数或方法时,.NET Framework会调用操作系统的API函数。然后.NET获取操作系统返回的一些值并将其返回给您。因此,在不同的操作系统中,您将获得不同的结果。

例如,假设GetProccessorType()(仅示例)是WIndows OS的DLL函数,get_cpu_type()(仅示例)与Linux的功能相同。它们都返回处理器类型。但是假设如果CPU是32位则GetProcessorType返回0,如果CPU是64位则返回1。但是在Linux中,get_cpu_type如果是32位则返回32,如果是64位则返回64。

现在假设.NET Framework在Linux和Windows中都有一个函数Ge​​tCPUMode()(实际上.NET Framework没有它,只是示例)(你应该已经知道了)。

在Windows中调用该函数时

....
public static void Main(){
    Console.WriteLine(GetCPUMode());
}
....

然后,如果您的PC是64位,那么1将在Windows中显示为输出,在Linux中将显示为64作为输出。我认为你必须制作一个二级解析方法来删除点。您可以为此目的查看字符串操作方法。