Date.TryParse的方法签名是:
Public Shared Function TryParseExact ( _
s As String, _
format As String, _
provider As IFormatProvider, _
style As DateTimeStyles, _
<OutAttribute> ByRef result As DateTime _
) As Boolean
我理解格式的作用,但提供商参数是什么?我知道您传入了CultureInfo实例,但我不确定它的用途是什么。
任何人都可以开导我吗?
答案 0 :(得分:8)
提供者指定有关日期的特定于文化的格式信息。
例如,您可以传递任何这些文化:
new CultureInfo("en-US") // USA
new CultureInfo("fr-FR") // France
new CultureInfo("it-IT") // Italy
new CultureInfo("de-DE") // Germany
您将根据这些文化格式化日期,例如:
另一个例子:使用“d”格式,表示在使用en-US进行CultureInfo时的M / d / yyyy短日期模式,请考虑:
DateTime dateValue;
string[] sampleDates = new[] { "31/8/2009", "8/31/2009" };
foreach (string currentDate in sampleDates)
{
bool result = DateTime.TryParseExact(currentDate, new[] {"d"},
new CultureInfo("en-US"),
DateTimeStyles.None,
out dateValue);
Console.WriteLine("{0}: {1}", currentDate, result ? "valid" : "invalid");
if (result)
{
Console.WriteLine("Result: {0}", dateValue);
}
Console.WriteLine();
}
输出:
31/8/2009: invalid
8/31/2009: valid
Result: 8/31/2009 12:00:00 AM
2009年8月31日无效,因为它不符合M / d / yyyy的美国文化格式,而8/31/2009是有效的,因为它确实有效。
答案 1 :(得分:1)
IFormatProvider
是一个知道如何格式化某事的类。 TryParseExact
需要询问它(在本例中具体为CultureInfo
),以查看字符串中是否存在任何特定的特定于文化的符号,例如星期几,上午/下午等。
此外,如果您只是将格式作为标准c#日期格式说明符之一传递,则必须咨询格式提供程序,以确定为给定文化准确转换的内容。
答案 2 :(得分:0)
世界各地的日期各不相同,无论是格式还是使用数月。 IFormatProviders了解这一点。