将不符合日期时间格式的字符串转换为日期时间类型

4

我有一个字符串,它不是日期时间格式,例如:20160503。我该如何将其转换为日期时间格式?我尝试使用Substring,它可以工作。但是否有更有效的方法?以下是我目前拥有的内容。

string a = "20160503";
int b = Convert.ToInt32(a.Substring(0, 4));
int c = Convert.ToInt32(a.Substring(4, 2));
int d = Convert.ToInt32(a.Substring(6, 2));
string date = b + "/" + c + "/" + d;
DateTime result = new DateTime();
DateTime.TryParse(date, out result);

鉴于今天的日期是2016年5月3日,我建议您使用格式“YYYYMMdd”并使用“DateTime.ParseExact”。 - Lasse V. Karlsen
3个回答

6

由于您知道日期时间的确切格式,您可以尝试使用ParseExact DateTime方法。

var dt = DateTime.ParseExact(a,"yyyyMMdd",CultureInfo.InvariantCulture);

更多信息,请参考此处


@Downvoter,请你能解释一下有什么问题吗,以便我可以进行修正。非常感谢。 - Christos
1
"YYYY" 应该改为 "yyyy"。这段代码现在会导致异常 "String was not recognized as a valid DateTime"。 - Knelis
出现错误:字符串无法识别为有效的 DateTime。 - Midhun Mathew
如果它不是一个有效的字符串呢?比如20161312。 - Midhun Mathew
如果字符串无效,则它不合法,方法将会抛出异常。您可以通过某种方式过滤掉无效的字符串,或者在解析过程中使用try/catch语句进行封装。 - sara
为确保它是一个有效的字符串,使用TryParseExact - Pikoh

3
尝试像这样做:
定义自己的解析格式字符串以使用。
string formatString = "yyyyMMdd";
string sample = "20160503";
DateTime dt = DateTime.ParseExact(sample,formatString,null);

1
感谢您的回复。最终我使用了DateTime.TryParseExact
string dateString = "20150503";
DateTime dateValue = new DateTime();
DateTime.TryParseExact(dateString, "yyyyMMdd", new CultureInfo("en-US"), DateTimeStyles.None, out dateValue);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接