如果我指定了确切的结构,为什么TryParseExact需要CultureInfo

本文关键字:结构 为什么 TryParseExact CultureInfo 需要 如果 | 更新日期: 2023-09-27 18:29:41

查看

DateTime.TryParseExact(dateString, "M/d/yyyy hh:mm:ss tt",
                           CultureInfo.InvariantCulture, 0, out dateValue)

我提供了要查找的确切结构:M/d/yyyy hh:mm:ss tt

问题

如果是,为什么我还需要指定CultureInfo

如果我指定了确切的结构,为什么TryParseExact需要CultureInfo

嗯,月份名称也可以本地化。也许在一些异国文化中,年份的计算方式也不同。

编辑:
示例:

string x = "Montag, 2. April 2012";
DateTime dt1, dt2;
bool r1 = DateTime.TryParseExact(x, "D", new CultureInfo("de-DE"), 0, out dt1);
bool r2 = DateTime.TryParseExact(x, "D", new CultureInfo("en-US"), 0, out dt2);

r1 == truer2 == false)。

或者,反过来:

string y = "Monday, April 02, 2012";
DateTime dt3, dt3;
bool r3 = DateTime.TryParseExact(y, "D", new CultureInfo("de-DE"), 0, out dt3);
bool r4 = DateTime.TryParseExact(y, "D", new CultureInfo("en-US"), 0, out dt4);

r3 == falser2 == true)。

因为格式字符串不是文字。例如,您使用了"/"answers":",但对于输入字符串,需要使用CultureInfo提供的日期和时间分隔符。

想象一下以下格式字符串:M/d/yyyy
这些输入都是有效的:

  • 2012年2月4日(针对不变文化,美国)
  • 2012年2月4日(芬兰)
  • 04-02-2012(摩洛哥)

此外,简单的"M"说明符可以是[1.12]或[1.13],具体取决于日历本身(请参阅MSDN)。

作为"蛋糕上的蜡烛",该函数是通用的,因此您可能需要在格式字符串中输入本地化(或取决于国家/地区)的值(想想工作日名称或指定的年份,例如,中文或日语)。

您需要告诉它区域性,因为如果您将格式dd-mmm-yyyy传递给它然后通过2012年5月1日

英语可能是2012年5月1日

但在另一种培养基中,它将是01-Mai-2012