gpt4 book ai didi

c# - 检查日期字符串是什么文化,然后将其转换为 DateTime

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:41 25 4
gpt4 key购买 nike

对于我的应用程序,第 3 方应用程序(在 Java 上运行)提供作为日期的字符串。现在这个应用程序以某种方式使用系统语言来给出日期字符串。

所以 2009 年 4 月 6 日可能是这样的:

  • 2009 年 4 月 6 日(zh-CN)
  • 2009 年 4 月 6 日(zh-CN)
  • 6 平均。 2009 年(法国 - 法国)
  • 06.04.2009 (de-DE)

等等..

对于我的应用程序,我需要将这些字符串转换为 DateTime。我知道方法 Convert.ToDateTime()DateTime.Parse()DateTime.ParseExact()

这段代码是我区分 en-US 和 de-DE 的方式:

private static DateTime ConvertToDateTime(string source)
{
CultureInfo cuDe = new CultureInfo("de-DE");
CultureInfo cuEn = new CultureInfo("en-US");

var result = new DateTime();

if (source.Contains("."))
{
result = Convert.ToDateTime(source, cuDe);
}
else
{
result = Convert.ToDateTime(source, cuEn);
}

return result;
}

这当然不适用于 fr-FR 中的字符串。我的问题是我不知道运行第 3 方应用程序的系统将设置哪种语言。

所以我的问题是:有什么方法可以检查字符串代表的文化日期格式吗?例如,我会输入“6 avr.2009”,它会返回 fr-FR 吗?还是我真的必须检查可能出现的每种可能的语言日期格式并自己检查,例如通过在特定语言中运行 string.Contains() 几个月?

注意事项:

  • 我无法更改第 3 方应用程序或其输出
  • 我无法获得有关运行应用程序的系统的其他信息

最佳答案

一般情况下,无法仅通过查看就知道是哪个原始文化创建了字符串。

考虑以下示例:

var date = new DateTime(1900, 12, 11);

var enUs = new CultureInfo("en-US");
var enGb = new CultureInfo("en-GB");

var strUs = date.ToString(enUs);
var strGb = date.ToString(enGb);

strUs 的输出将为 12/11/1900

strGb 的输出将为 11/12/1900。请注意,月份和日期在美国格式中是倒置的。

仅看字符串,我们无法判断哪个是月份,哪个是日期。这就是为什么 API 应该使用像 ISO 8601 这样明确的格式的原因。 .


也就是说,如果我们知道外部服务使用的确切格式并且这些格式是可区分的,您可以尝试使用已知的格式字符串进行解析。

private static DateTime ParseMultiCulture(string dateString) {
DateTime output;

string[] formatsEnUs = {"MMM d, yyyy"};
string[] formatsEnGB = {"dd-MMM-yyyy"};
string[] formatsFrFr = {"d MMM yyyy"};
string[] formatsDeDe = {"dd.MM.yyyy"};


if (DateTime.TryParseExact(dateString, formatsEnUs, new CultureInfo("en-US"),
DateTimeStyles.None, out output)) {
return output;
}

if (DateTime.TryParseExact(dateString, formatsEnGB, new CultureInfo("en-GB"),
DateTimeStyles.None, out output)) {
return output;
}

if (DateTime.TryParseExact(dateString, formatsFrFr, new CultureInfo("fr-FR"),
DateTimeStyles.None, out output)) {
return output;
}

if (DateTime.TryParseExact(dateString, formatsDeDe, new CultureInfo("de-De"),
DateTimeStyles.None, out output)) {
return output;
}

throw new NotSupportedException("Given datestring is in a format that is not supported.");
}

C# Fiddle

关于c# - 检查日期字符串是什么文化,然后将其转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497482/

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