【问题标题】:How can process a date that is in d/m/yyyy?如何处理 d/m/yyyy 中的日期?
【发布时间】:2013-08-15 07:02:14
【问题描述】:

我必须处理日期。如果我指定的格式是 mm/dd/yyyy 并且日期类似于 2013 年 7 月 5 日,则会引发格式异常。日期必须是 07/05/2013 吗?如果是,我如何以编程方式将日期从 2013 年 7 月 5 日更改为 2013 年 7 月 5 日?并且日期格式不具体。我可以在 mm-dd-yyyy 或 yyyy-mm-dd 中有日期,日期可以是 2013 年 7 月 5 日。

【问题讨论】:

    标签: c# date-format


    【解决方案1】:

    使用ParseExact 方法,并将格式指定为M/d/yyyy(或d/M/yyyy,具体取决于您的需要):

    var date = DateTime.ParseExact(input, "M/d/yyyy");
    

    还有一个可以处理多种日期格式的重载:

    var date = DateTime.ParseExact(input, 
        new[] { "M/d/yyyy", "M-d-yyyy" }, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None);
    

    如果输入不是允许的格式之一,这可能仍会引发FormatException。为了更安全地处理这个问题,请查看TryParseExact 方法:

    DateTime date;
    var success = DateTime.TryParseExact(
        input, 
        new[] { "M/d/yyyy", "M-d-yyyy" }, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None, 
        out date);
    

    在将日期转换回字符串时,不要忘记指定正确的格式 / 和不变的文化:

    var output = date.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);
    

    【讨论】:

    • 或者实际上,d/m/yyyy,因为这就是问题的含义
    • @MarcGravell 这就是标题所说的,但问题本身是模棱两可的。
    • 它可以接受像 12/11/2013 还是像 9/15/2013 这样的日期?
    • 请注意,这些应该使用M,而不是m - m 是几分钟。
    • 您应该添加CultureInfo.InvariantCulture,否则我认为/ 将被本地化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多