使用TryParseExact将“August 2012”转换为DateTime对象

时间:2017-10-13 17:31:08

标签: c# datetime datetime-format tryparse

我正在尝试将格式为“August 2012”的字符串解析为DateTime对象。该字符串来自DataTable中的列名称。

string columnName= row[col].ToString(); // "August 2012"

最初我尝试使用DateTime.TryParse()...

bool result = DateTime.TryParse(row[col].ToString, out convertedDateTime);

但它仍然是假的。接下来我尝试使用DateTime.TryParseExact,使用正如here所述的正确的cultureformat ...

CultureInfo enUS = new CultureInfo("af-ZA");
DateTime.TryParseExact(row[col].ToString(), "y", enUS, DateTimeStyles.None, out columnNameAsDate)

但是,这也是假的。我究竟做错了什么?我不能将 2012年8月格式的字符串解析为DateTime对象吗?

2 个答案:

答案 0 :(得分:3)

这应该给你预期的日期。

string columnName= row[col].ToString();  // ==> August 2012
CultureInfo enUS = new CultureInfo("en-US");
DateTime.TryParseExact(columnName, "MMMM yyyy", enUS, DateTimeStyles.None, out columnNameAsDate);

首先:您应该指定确切的文化。在af-ZA文化中,一年中的第八个月被命名为" Augustus"不是"八月"当然,这将失败。

第二:你应该传递正确的格式规范来获得完整的月份名称(MMMM)和年份(yyyy)。

答案 1 :(得分:0)

我会首先拆分字符串:

DateTime outDate = new DateTime();
string[] words = columnName.Split(' ');
if(words.Length>1){
   string month = words[0].Substring(0,3);
   string year = words[1];
   outDate = DateTime.ParseExact(month+' '+year, 
   "MMM yyyy", System.Globalization.CultureInfo.InvariantCulture);
}