我如何将以下字符串日期解析为 C# 中的 DateTime 对象:
“1970 年 1 月 1 日,星期四”
这来自 XML 提要,DateTime.Parse 似乎不喜欢它在 en-GB 区域设置中。提要只会来自英国服务器,所以我不用担心全局化问题
我最初的蛮力方法是:
- 删除包括逗号在内的所有内容,以及留下“1st January 1970”的尾随空格
- 然后根据需要删除“st”、“nd”、“rd”或“th”以留下“1 January 1970”
- 然后将月份转换为它的等效数字,留下“1 1 1970”
- 然后用“/”替换空格得到“1/1/1970”
不过我确定一定有更优雅的方法?我无法让 DateTime.Prse 或 Datetime.ParseExact 工作
最佳答案
我不相信 DateTime
解析对序号有任何了解,但它应该能够处理其他一切。所以你可以使用:
public static string RemoveOrdinals(string input)
{
// Ugly but oh so simple.
return input.Replace("0th", "0")
.Replace("1st", "1")
.Replace("2nd", "2")
.Replace("3rd", "3")
.Replace("11th", "11") // Need to handle these separately...
.Replace("12th", "12")
.Replace("13th", "13")
.Replace("4th", "4")
.Replace("5th", "5")
.Replace("6th", "6")
.Replace("7th", "7")
.Replace("8th", "8")
.Replace("9th", "9");
}
然后:
string text = RemoveOrdinals(text);
DateTime date = DateTime.ParseExact(text, "dddd, d MMMM yyyy",
CultureInfo.GetCulture("en-GB"));
(作为一个快速插件,当然你只需要一个日期而不是日期/时间。不幸的是 .NET 没有一个类型来表示它 - 但你可以在我的中使用 LocalDate
Noda Time 库。我们也不处理序数 - 但无论如何 - 所以您仍然需要额外的方法。不过,如果您想查看相关代码,请告诉我。)
关于c# - 在 C# 中将非常长的日期格式解析为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17710561/