2016-12-01 153 views
1

尝试将像这样的字符串Dec 1, 2016 1:48 PM CST转换为DateTime对象。有没有办法将这种字符串转换为日期?

Convert.ToDateTime(story.AddedDateString);没有工作,我也没有真正期待它。

System.FormatException:该字符串未被识别为有效的 DateTime。有一个未知单词从索引21开始。

是我得到的错误消息。想知道在尝试转换之前是否可以告诉它格式?

+4

考虑像**解析搜索关键字**。因为这听起来像你想要做的。将字符串解析为DateTime对象,并提供自定义格式。 –

回答

9

DateTime.ParseExact会得到你最的方式存在。例如:

string input = "Dec 1, 2016 1:48 PM"; 
DateTime date = DateTime.ParseExact(input, "MMM d, yyyy h:mm tt", CultureInfo.InvariantCulture); 

但是,它不通过的缩写处理的时间段,因为有multiple time zones with CST为缩写。框架内不直接支持将“CST”转换为偏移量。

如果您转换为一种格式,其中包括偏移量,你可以把它转换:

string input = "Dec 1, 2016 1:48 PM -06:00"; 
DateTime date = DateTime.ParseExact(input, "MMM d, yyyy h:mm tt K", CultureInfo.InvariantCulture); 
2

您可以使用DateTime.ParseExact()并使用可用的DateTime格式化程序指定格式字符串。

举个例子:

string date = "Dec 1, 2016 1:48 PM CST"; 
DateTime parsedDate = DateTime.ParseExact(myDate, "MMM d, yyyy h:mm tt", CultureInfo.InvariantCulture); 

与此唯一的问题是,它不会处理您的时区。您需要处理时区,方法是用UTC偏移量替换该字符串部分(如果使用-06:00的格式zzz,则DateTime.ParseExact()将处理该字符串),或者删除该字符串的一部分并计算您的时区有一个实际的日期对象。

你可以阅读更多的https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx

+2

这是一条评论,而不是答案 – mybirthname

+3

如果你显示它的工作原理,这将是一个答案。 –