2017-10-13 185 views
3

我正在尝试将格式为“2012年8月”的字符串解析为DateTime对象。该字符串来自DataTable中的列名称。使用TryParseExact将“2012年8月”转换为DateTime对象

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

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

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

但它一直返回false。所以下次我试着用DateTime.TryParseExact使用正确的cultureformat描述here ...

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

然而,这回头率假也。我究竟做错了什么?我不应该能够将格式为2012年8月的字符串解析为DateTime对象吗?

回答

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文化中,一年的第八个月被命名为“奥古斯都”而不是“八月”,这当然会失败。

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

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); 
} 
相关问题