c# - 在 C# 中将非常长的日期格式解析为 DateTime

标签 c# parsing datetime

我如何将以下字符串日期解析为 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/

上一篇:C#初学者问题

下一篇:c# - LINQ 和 ReSharper

相关文章:

c# - 使用自定义异常表单

c# - 使用运算符 <、<= 等测试两个对象

c# - Entity Framework - 无法加载指定的元数据资源

python - 多个类的 find_element_by_class_name

c# - 在 C# 4.0 中实现 IEnumerable

java - 如何正确从 url 读取 JSON 数组数据

Python,需要帮助将文本文件中的项目解析为列表

python - 如何将增量添加到 python datetime.time?

java - 如何将 Calendar 对象设置为当前日期,但包含 HH :mm:ss 的 SimpleDateFormat 中的时间

sql - 如何正确转换或查询 Rails/MySQL DateTime 列的日期范围