2008-09-15 50 views
5

有人请纠正我,如果我错了,但解析yyyy/MM/dd(或其他特定格式)日期在C#应该应该很容易作为解析C#中的确切日期不应该强制你创建一个IFormatProvider

DateTime.ParseExact(theDate, "yyyy/MM/dd"); 

,但没有,C#迫使你创建的IFormatProvider。

是否有一个app.config友好的方式来设置这个,所以我不需要每次都这样做?

DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true)); 

回答

14

IFormatProvider参数可以为null。

+0

来自MSDN文档:“如果提供程序是空引用(在Visual Basic中为Nothing),则使用与当前区域性对应的CultureInfo对象。” – 2008-09-15 16:57:10

+0

我意识到我不应该暗示需要使用app.config。你得到了我想要的东西 - '只是解析日期,不用担心我不关心的东西'。谢谢。 – AlanR 2008-09-15 17:30:26

3

创建一个扩展方法:

public static DateTime ParseExactDateTime(this string dateString, string formatString) { 
    return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true)); 
} 
+0

谢谢你。我并没有真正认为这一点很好。 – 2008-09-15 17:05:48

5

使用当前应用文化:

DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture); 

您可以用全球化标签设置应用程序的文化在App.config。我认为。

1

您也可以简单地创建一次IFormatProvider并将其存储起来供以后使用。

1

您还可以使用Convert类

Convert.ToDateTime("2008/11/25"); 
6

ParseExact需要文化:考虑 “YYYY MMM DD”。 MMM将是使用当前文化的本地化月份名称。

3

它需要格式提供者来确定特定的日期和时间符号和字符串(例如特定语言中的星期几的名称)。您可以使用null,在这种情况下,将使用与当前文化相对应的CultureInfo对象。

如果您不想每次都指定它,请创建一个扩展方法,该方法传递null或CultureInfo(“en-CA”,true)作为格式提供程序。

0

//转换日期到MySql兼容格式

日期时间则DateValue = Convert.ToDateTime(datetimepicker.text);

string datevalue = DateValue.ToString(“yyyy-MM-dd”);

0

使用Globalization.CultureInfo.InvariantCulture有什么问题?