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

时间:2019-04-08 10:59:14

标签: c# linux windows .net-core date-format

我遇到了一个问题。我需要以西里尔字母解析特定格式ddMMMyy的Date。当我在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Апр.19 在Linux上有一个奇数点

以我的理解格式在.net框架中进行了硬编码,我想知道为什么它依赖于平台。所以问题是Win和Linux机器之间存在差异,谁会导致此问题?

1 个答案:

答案 0 :(得分:0)

当您在与操作系统连接的.NET Framework(与Core相同)中调用任何名称空间的函数或方法时,.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(您应该已经知道)中都具有GetCPUMode()函数(实际上.NET Framework没有它,仅作为示例)。

在Windows中调用该函数

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

然后,如果您的PC是64位的,则Windows中的输出将显示1,而Linux中的输出将显示64。我认为您将不得不采用辅助解析方法来删除点。您可以为此目的查看字符串操作方法。