如果我指定了确切的结构,为什么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
?
嗯,月份名称也可以本地化。也许在一些异国文化中,年份的计算方式也不同。
编辑:
示例:
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 == true
、r2 == 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 == false
、r2 == 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