C# 如何将特定字符串转换为DateTime?

C# 如何将特定字符串转换为DateTime?,c#,string,datetime,asp.net-core,.net-core,C#,String,Datetime,Asp.net Core,.net Core,我有一个以下格式的字符串: Tuesday, Sep 01, 2020 04:15 Thursday, Aug 27, 2020 03:56 Friday, Aug 28, 2020 07:30 Tuesday, Aug 04, 2020 08:00 [路线(“/test”)] 公共异步void TestParseTime() { string pattern=“dddd,MMM-dd,YYYY-HH:MM”; string newsTimeString=“周四,2020年8月27日03:56

我有一个以下格式的字符串:

Tuesday, Sep 01, 2020 04:15
Thursday, Aug 27, 2020 03:56
Friday, Aug 28, 2020 07:30
Tuesday, Aug 04, 2020 08:00
[路线(“/test”)]
公共异步void TestParseTime()
{
string pattern=“dddd,MMM-dd,YYYY-HH:MM”;
string newsTimeString=“周四,2020年8月27日03:56”;
DateTime newsTime=DateTime.ParseExact(newsTimeString,pattern,null);
Console.WriteLine(“newtime=“+newtime”);
}
但将字符串解析为datetime失败,出现以下异常:


如何在C#中将其转换为日期时间?

您的模式不正确。模式区分大小写。请改用此模式:

dddd,MMM-dd,yyyy-hh:mm

string pattern = "dddd, MMM dd, yyyy hh:mm";
Console.WriteLine(DateTime.Now.ToString(pattern));

string newsTimeString = "Thursday, Aug 27, 2020 03:56";
DateTime newsTime = DateTime.ParseExact(newsTimeString, pattern, null);
Console.WriteLine("newsTime = " + newsTime);

你的模式不正确。模式区分大小写。请改用此模式:

dddd,MMM-dd,yyyy-hh:mm

string pattern = "dddd, MMM dd, yyyy hh:mm";
Console.WriteLine(DateTime.Now.ToString(pattern));

string newsTimeString = "Thursday, Aug 27, 2020 03:56";
DateTime newsTime = DateTime.ParseExact(newsTimeString, pattern, null);
Console.WriteLine("newsTime = " + newsTime);

我建议使用powerfull方法,只需在其中输入:

string newsTimeString = "Thursday, Aug 27, 2020 03:56";
DateTime newsTime = Convert.ToDateTime(newsTimeString);
Console.WriteLine("newsTime = " + newsTime);
输出:

新闻时间=27.08.2020 03:56:00

实际上,“星期四”字符串对于
DateTime
对象来说是多余的信息。因为它会从日历中知道一周中的哪一天。您可以通过属性打印它:

Console.WriteLine("Day = " + newsTime.DayOfWeek);
输出:

天=星期四

编辑:

显然:“Convert.ToDateTime只是一个”(Panagiotis Kanavos的评论),因此在本例中,您还可以使用:

DateTime newsTime = DateTime.Parse(newsTimeString);
并获得相同的结果,而不指定任何格式

免责声明:

从报告的备注部分:

“如果值不为null,则返回值是使用为当前区域性初始化的
DateTimeFormatInfo对象中的格式信息对值调用
DateTime.Parse方法的结果。”-


我建议使用powerfull方法,只需在其中输入:

string newsTimeString = "Thursday, Aug 27, 2020 03:56";
DateTime newsTime = Convert.ToDateTime(newsTimeString);
Console.WriteLine("newsTime = " + newsTime);
输出:

新闻时间=27.08.2020 03:56:00

实际上,“星期四”字符串对于
DateTime
对象来说是多余的信息。因为它会从日历中知道一周中的哪一天。您可以通过属性打印它:

Console.WriteLine("Day = " + newsTime.DayOfWeek);
输出:

天=星期四

编辑:

显然:“Convert.ToDateTime只是一个”(Panagiotis Kanavos的评论),因此在本例中,您还可以使用:

DateTime newsTime = DateTime.Parse(newsTimeString);
并获得相同的结果,而不指定任何格式

免责声明:

从报告的备注部分:

“如果值不为null,则返回值是使用为当前区域性初始化的
DateTimeFormatInfo对象中的格式信息对值调用
DateTime.Parse方法的结果。”-


你确定你的意思是HH:MM(考虑到大写的M是month)?此外,如果“8月1日”是可能的,您应该使用
MMM d
而不是
MMM dd
,因为这将涵盖“8月27日”和“8月1日”。我倾向于分钟…“HH:mm”不是“HH:mm”,John是绝对正确的。是的,格式字符串末尾的大写字母“mm”可能用于分钟,但“mm”表示月份,小写字母“mm”表示分钟。所以您需要使用字符串模式=“dddd,mmmdd,YYYY HH:mm”;希望它也能解决这个问题。小“y”s:small tipp:如果我遇到了日期解析问题,我有一个按模式格式化的日期。这很快就暴露了一些不幸。你确定你的意思是HH:MM(考虑到大写的M是month)?此外,如果“8月1日”是可能的,您应该使用
MMM d
而不是
MMM dd
,因为这将涵盖“8月27日”和“8月1日”。我倾向于分钟…“HH:mm”不是“HH:mm”,John是绝对正确的。是的,格式字符串末尾的大写字母“mm”可能用于分钟,但“mm”表示月份,小写字母“mm”表示分钟。所以您需要使用字符串模式=“dddd,mmmdd,YYYY HH:mm”;希望它也能解决这个问题。小“y”s:small tipp:如果我遇到了日期解析问题,我有一个按模式格式化的日期。这很快就揭示了一些不幸。现在是24小时,虽然是“HH”。他的示例代码使用03:56,您无法判断是上午还是下午。此外,MM不起作用。您应该在ParseExact中添加一个
CultureInfo
,因为该代码目前在具有非英语默认区域性的系统上会失败。即使在英语系统上,我也非常自信地说,缺少的“am/PM”强烈暗示了24小时格式,即使示例中没有包含一个小时>12的。@Fildor:是的,应该具体说明这一点。但在我的(德国)电脑上,我会得到一个例外,因为输入中有星期四。这是24小时,虽然是“HH”。他的示例代码使用03:56,你无法判断是上午还是下午。此外,MM不起作用。您应该在ParseExact中添加一个
CultureInfo
,因为该代码目前在具有非英语默认区域性的系统上会失败。即使在英语系统上,我也非常自信地说,缺少的“am/PM”强烈暗示了24小时格式,即使示例中没有包含一个小时>12的。@Fildor:是的,应该具体说明这一点。但在我的(德语)PC上,我会遇到一个异常,因为输入中有星期四。
Convert.ToDateTime
is。“如果值不为null,则返回值是调用DateTime.Parse方法的结果,该方法使用针对当前区域性初始化的DateTimeFormatInfo对象中的格式信息。”。使用Convert时需要注意一件事。@Fildor也加入了这一点,非常感谢您
Convert。ToDateTime
是。“如果值不为null,则返回值是调用DateTime的结果。使用为当前区域性初始化的DateTimeFormatInfo对象中的格式信息对值解析方法。”-我强调。只有一件事要注意,当使用Convert时。@Fildor也加入了这一点,非常感谢