无法在 C# 中解析“2020 年 9 月 4 日”或“2020 年 9 月 4 日”日期字符串
Posted
技术标签:
【中文标题】无法在 C# 中解析“2020 年 9 月 4 日”或“2020 年 9 月 4 日”日期字符串【英文标题】:Not able to parse "Sept 4, 2020" or "sept 4, 2020" date string in C# 【发布时间】:2021-07-05 02:21:50 【问题描述】:我用过
DateTime.Parse
DateTime.TryParse
DateTime.TryParseExact
DateTime.ParseExact
没有任何工作。请帮忙
【问题讨论】:
原因是九月的缩写是Sep
而不是Sept
,至少在我所知道的文化中。你从哪来?因此,您要么需要使用 CultureInfo
的 Sept
,要么将其替换为 Sep
。
可以为月份指定自定义名称,请查看此帖子:***.com/questions/2253881/…
【参考方案1】:
原因是九月的缩写是Sep
而不是Sept
,至少在我所知道的文化中是这样。你从哪来?因此,您要么需要在其 Sept
的位置使用 CultureInfo
,要么在输入中将其替换为 Sep
。
更好的(比替换)选项是创建自定义CultureInfo
:
CultureInfo myCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
myCulture.DateTimeFormat.AbbreviatedMonthNames = GetCustomAbbreviatedMonthNames();
string[] dates = "Sept 4, 2020", "sept 4, 2020";
string[] formats = "MMM d, yyyy";
foreach (string s in dates)
Console.WriteLine(DateTime.TryParseExact(s, formats, myCulture, DateTimeStyles.None, out DateTime dt) ? $"Valid<dt>" : $"invalid<s>");
static string[] GetCustomAbbreviatedMonthNames()
string[] template = CultureInfo.InvariantCulture.DateTimeFormat.AbbreviatedMonthNames;
// replace the september but also you might want to do it with the other months as well
template[8] = "Sept";
return template;
输出:
Valid<04.09.2020 00:00:00>
Valid<04.09.2020 00:00:00>
【讨论】:
成功了。真的很感谢你的回复@Tim【参考方案2】:您可以在 C# 中查看有关日期的其他帖子:Date Format in Day, Month Day, Year
您也可以阅读:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
尝试使用:
string date = DateTime.Now.ToString("MMM dd, yyyy");
输出将是
截至今天:
Apr 09, 2021
这里是关于 C# 中日期格式的完整指南: https://www.c-sharpcorner.com/blogs/date-and-time-format-in-c-sharp-programming1
【讨论】:
这会将日期转换为字符串,而不是请求的其他方式。另外,它会给出完整的月份名称,而不是 4 个字母的缩写 我编辑了结果的答案以上是关于无法在 C# 中解析“2020 年 9 月 4 日”或“2020 年 9 月 4 日”日期字符串的主要内容,如果未能解决你的问题,请参考以下文章
乌镇用户大会 | 擎创夏洛克AIOps智慧运营平台全新发布,点亮数字化转型之路