gpt4 book ai didi

.net - 在 .NET 中处理部分/不完整的日期

转载 作者:行者123 更新时间:2023-12-02 04:17:59 26 4
gpt4 key购买 nike

我需要处理部分日期,例如:

  • 2009 年 4 月 1 日(存储为 1、4、200)
  • 2000 年 1 月(存储为空,2000 年 1 月)
  • 90 年 3 月(存储为空,1990 年 3 月)
  • 00(存储为空,空,2000)

  • 等等。

    看着它,我不认为这是一个大问题,因为它只需要处理英国日期,所以全局化不是一个考虑因素。棘手的问题是用户输入 50 时的含义是什么,这意味着 1950 还是 2050。

    在我真正涉足并重新发明轮子之前,之前是否已经在一些我可以用作引用或直接使用的代码中完成了这项工作?

    清晰度更新

    部分日期将用于存储 25 岁以下人员的出生日期。

    至于数据将如何显示:

    用户输入:01/00

    解释为:2000 年 1 月

    显示为:2000 年 1 月

    用户输入:01/01/99

    解释为:1/Jan/1999

    显示为:1999 年 1 月 1 日

    最佳答案

    如果我们将这些值放在 DateTime.Parse 中,那么唯一会导致问题的是最后一个,因为它不包含任何形式的日期指示:

    Console.WriteLine(DateTime.Parse("1 April 2009"));
    // Outputs 01/04/2009 00:00:00
    Console.WriteLine(DateTime.Parse("Jan 2000"));
    // Outputs 01/01/2000 00:00:00
    Console.WriteLine(DateTime.Parse("March 90"));
    // Outputs 01/03/1990 00:00:00
    Console.WriteLine(DateTime.Parse("00"));
    // Throws an exception

    但是,将 Jan 放在最后一个字符串的开头会给我们:
    Console.WriteLine(DateTime.Parse("Jan 00"));
    // Outputs 01/01/2000 00:00:00

    所以,也许一个有点老套的解决方案是正则表达式匹配任何仅由 2 个或 4 个数字组成的字符串,并在其前面加上文本“Jan”?
        String sample = "00";

    //check for 2 or 4 numbers in the string, nothing else
    //except space before and after
    if (Regex.IsMatch(sample, @"^\s*(\d{2}|\d{4})\s*$"))
    {
    sample = "Jan " + sample;
    }

    Console.WriteLine(DateTime.Parse(sample));
    // Outputs 01/01/2000

    如果 sample 是 00、2000 或任何其他 2 或 4 位(加上空格)字符串,这也将起作用。

    您的评论中指出的 3/00 字符串是一个笨拙的字符串,如果它以 0 为前缀,或者如果“/”被替换为空格,则 DateTime 不会异常(exception)。
    您需要做的是检查包含“/”后跟 2 位数字的字符串,然后在这两个数字前加上“20”,得到“3/2000”,可以解析。

    令人讨厌的是,DateTime.Parse 方法不允许检测它在解析时发现的空字段(它只是将这些字段检测为月/年的开始)。

    也许,作为一个 UI 建议,不要在放入数据库时​​过于聪明,当用户输入这个疯狂的日期字符串时,在提交表单(它是 Web 表单吗?)时解析它。如果格式不是很清楚,向用户建议可能的格式,例如,您是指 1950 还是 2050?

    关于.net - 在 .NET 中处理部分/不完整的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1668172/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com