gpt4 book ai didi

c# .net 核心在 Windows 和 Linux 上日期格式 MMM 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:18 25 4
gpt4 key购买 nike

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

导致异常的代码如下:

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 机器上有什么不同,是谁导致了这个问题?

最佳答案

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

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

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

在windows中调用函数时

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

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

关于c# .net 核心在 Windows 和 Linux 上日期格式 MMM 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com