我遇到了一个问题。我需要以西里尔字母解析特定格式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机器之间存在差异,谁会导致此问题?
答案 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。我认为您将不得不采用辅助解析方法来删除点。您可以为此目的查看字符串操作方法。