我正在尝试将格式为“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对象吗?
答案 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);
}