C#如何将字符串转换为时间和日期格式?

3
我有一个简短的程序,可以将一个简单的字符串转换为日期和时间格式。
但是,由于字符串的顺序问题,系统无法将该字符串转换为日期时间格式。应该被转换的字符串示例为:"Thu Dec 9 05:12:42 2010"。
已经使用了Convert.ToDateTime方法,但不起作用。
请问有人能提供代码建议吗?谢谢!
String re = "Thu Dec  9 05:12:42 2010";

DateTime time = Convert.ToDateTime(re);

Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));

请查看另一个用户回答的网页,他成功地得出了完全正确的答案:https://dev59.com/o1LTa4cB1Zd3GeqPcKTS 谢谢大家的帮助! - JavaNoob
5个回答

6

看一下DateTime.TryParseExact

DateTime time; 
if (DateTime.TryParseExact(re,
     "ddd MMM d hh:mm:ss yyyy", CultureInfo.CurrentCulture, 
      DateTimeStyles.None, out time)) {

    Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));
} else {
    Console.WriteLine("'{0}' is not in an acceptable format.", re);
}

如果你没有检查TryParseExact的结果,那么你可能会假设它成功了 - 在这种情况下,你应该使用ParseExact而不是TryParseExact - 它会告诉你你的假设是错误的。 - Marc Gravell
@JavaNoob - 你需要确保输入的字符串与你期望的格式匹配。其他答案/评论中有一些解决方案可以修复你遇到的异常(例如@Marc的作弊评论:re.Replace(" "," "))。 - Geoff Appleford

1
通常需要给出关于您期望的特定模式的提示:
编辑:双空格很麻烦,因为d无法处理;
DateTime time = DateTime.ParseExact(re.Replace("  "," "),
     "ddd MMM d hh:mm:ss yyyy", CultureInfo.CurrentCulture);

它输出了无法转换的错误。"System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)" 的错误。 - JavaNoob
@JavaNoob - 嗯;那个双空格真的很麻烦;我实际上在想你是否应该通过传递 re.Replace(" "," ")(第一个引号中有两个空格,第二个引号中有一个空格)来作弊。 - Marc Gravell
但是如果双倍行距不适用于10个以上的日期,例如 "Thu Dec 11 05:12:42 2010" 呢?谢谢。 - JavaNoob
@JavaNoob - “d” 可以处理两位数,但是 “dd” 需要前导零。 - Marc Gravell
即使使用.replace方法,该系统仍无法识别“Thu Dec 9 05:12:42 2010”。 - JavaNoob
你的答案是正确的,不过我与上面一条评论中的另一个答案进行了参数测试,我认为你漏掉了一些正确答案所需的参数。但还是谢谢你的帮助,伙计! - JavaNoob

0

不确定字符串输入是否应该有双空格,但您可以将其删除并使用Geoff的答案。

re = Regex.Replace(re, @"\s+", " ");

另一个选项是相应地调整他的匹配字符串。

DateTime time = DateTime.ParseExact(re, "ddd MMM  d HH:mm:ss yyyy", CultureInfo.CurrentCulture);

0

0

试试这个

DateTime time = Convert.ToDateTime("2010, 9, 12, 05, 12, 42"); 

Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss")); 

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