.Net 5 DateTime.ParseExact 个问题
.Net 5 DateTime.ParseExact problems
刚刚迁移到 .Net 5。
“日期”变量中的下一个代码 returns“01/01/0001 00:00:00 +00:00”。
DateTime.TryParseExact(
"Июн 16 2021",
"MMМ d yyyy",
CultureInfo.CreateSpecificCulture("ru-RU"),
DateTimeStyles.None,
out DateTime date
);
https://dotnetfiddle.net/E5VDbH
在 .Net Core 3.1 上没有问题。
有没有人运行遇到同样的问题?
我与@PMF 的方向相同,打印了 ru-RU
文化的所有月份名称。从那里我可以看到没有月份缩写与您的示例中的相匹配。以下是获取所有有效值的方法:
var ci = CultureInfo.CreateSpecificCulture("ru-RU");
Console.WriteLine(String.Join(" - ", ci.DateTimeFormat.AbbreviatedMonthNames));
看到我们在六月,我怀疑 Июн
也应该是六月,在 .NET 5 中缩写为 июнь
。
我不会读或写俄语,所以我不知道这些与 您 的期望相比如何,但这至少是 .NET 5 的期望。
当我在您的示例中将 Июн
替换为 июнь
时,它正确地将其解析为日期。
如果您使用 DateTime.ParseExact()
并将您的代码包围在 try/catch
中,您可能已经看到了这一点。你会得到一个异常告诉你:
String 'Июн 16 2021' was not recognized as a valid DateTime.
这可以为您指明正确的方向。
这是 .NET 5 中的重大更改,其中 Globalization APIs use ICU libraries on Windows. To keep the old behaviour, you can add the following to the .csproj file
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
其他选项设置在runtimeconfig.json
上的“System.Globalization.UseNls”
{
"runtimeOptions": {
"configProperties": {
"System.Globalization.UseNls": true
}
}
}
或设置环境变量DOTNET_SYSTEM_GLOBALIZATION_USENLS
为true
或1
.
刚刚迁移到 .Net 5。
“日期”变量中的下一个代码 returns“01/01/0001 00:00:00 +00:00”。
DateTime.TryParseExact(
"Июн 16 2021",
"MMМ d yyyy",
CultureInfo.CreateSpecificCulture("ru-RU"),
DateTimeStyles.None,
out DateTime date
);
https://dotnetfiddle.net/E5VDbH
在 .Net Core 3.1 上没有问题。
有没有人运行遇到同样的问题?
我与@PMF 的方向相同,打印了 ru-RU
文化的所有月份名称。从那里我可以看到没有月份缩写与您的示例中的相匹配。以下是获取所有有效值的方法:
var ci = CultureInfo.CreateSpecificCulture("ru-RU");
Console.WriteLine(String.Join(" - ", ci.DateTimeFormat.AbbreviatedMonthNames));
看到我们在六月,我怀疑 Июн
也应该是六月,在 .NET 5 中缩写为 июнь
。
我不会读或写俄语,所以我不知道这些与 您 的期望相比如何,但这至少是 .NET 5 的期望。
当我在您的示例中将 Июн
替换为 июнь
时,它正确地将其解析为日期。
如果您使用 DateTime.ParseExact()
并将您的代码包围在 try/catch
中,您可能已经看到了这一点。你会得到一个异常告诉你:
String 'Июн 16 2021' was not recognized as a valid DateTime.
这可以为您指明正确的方向。
这是 .NET 5 中的重大更改,其中 Globalization APIs use ICU libraries on Windows. To keep the old behaviour, you can add the following to the .csproj file
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
其他选项设置在runtimeconfig.json
上的“System.Globalization.UseNls”{
"runtimeOptions": {
"configProperties": {
"System.Globalization.UseNls": true
}
}
}
或设置环境变量DOTNET_SYSTEM_GLOBALIZATION_USENLS
为true
或1
.