代码之家  ›  专栏  ›  技术社区  ›  Marks

以多种组合从字符串解析日期和时间

  •  0
  • Marks  · 技术社区  · 15 年前

    所以我得到:

    Date = "9/15/2010"
    Time = "16:12:45"
    DateFormat = "M/dd/yyyy"
    TimeFormat = "h:mm:ss"
    TimeZone = "+2:00:00"  // +/- and time in TimeFormat
    

    但是我在解析这些字符串时遇到了一些问题。

    DateTime.ParseExact("16:12:45","h:mm:ss",null,DateTimeStyles.None);
    

    不工作并导致FormatException。这个电话怎么了?

    @"M\/dd\/yyyy" . 还有其他需要逃跑的吗?

    我能把整个DateTime解析成一个吗?比如:

    DateTime.ParseExact(Date+' '+Time+' '+TimeZone,DateFormat+' '+TimeFormat+' +'+TimeFormat,null,DateTimeStyles.None);
    
    4 回复  |  直到 15 年前
        1
  •  2
  •   LukeH    15 年前

    这个电话怎么了?

    “高:毫米:不锈钢” h );字符串中的小时是24小时格式,因此需要使用 H

    DateTime.ParseExact("16:12:45", "H:mm:ss", null, DateTimeStyles.None);
    

    还有其他需要逃跑的吗?

    a format specifier 需要逃走。例如, / 是日期分隔符,但是 \/ 意思是字面意思 / : \: 意思是字面意思 : 性格; y \y y 性格。

    我能把整个DateTime解析成一个吗?

        2
  •  1
  •   Enigmativity    15 年前

    var @return = (DateTime?)null;
    if (source != null)
    {
        source = source.Trim();
        if (source.Length > 0)
        {
            var fs = new string[]
            {
                "d MMMM yyyy h:mm tt",
                "d MMMM yyyy h:mm:ss tt",
                "d MMMM yyyy HH:mm",
                "d MMMM yyyy HH:mm:ss",
                "d MMMM yyyy",
                "d/M/yy h:mm tt",
                "d/M/yy h:mm:ss tt",
                "d/M/yy HH:mm",
                "d/M/yy HH:mm:ss",
                "d/M/yy",
                "d/M/yyyy HH:mm",
                "d/M/yyyy HH:mm:ss",
                "d/M/yyyy h:mm:ss tt",
                "d/M/yyyy",
                "d/M/yyyy h:mm tt",
                "d-MMMM-yy HH:mm",
                "d-MMMM-yyyy h:mm tt",
                "d-MMMM-yyyy h:mm:ss tt",
                "d-MMMM-yyyy HH:mm",
                "d-MMMM-yyyy HH:mm:ss",
                "d-MMMM-yyyy",
                "d-MMM-yy",
                "d-MMM-yy h:mm tt",
                "d-MMM-yy h:mm:ss tt",
                "d-MMM-yy HH:mm",
                "d-MMM-yy HH:mm:ss",
                "d-MMM-yyyy",
                "d-M-yy h:mm tt",
                "d-M-yy h:mm:ss tt",
                "d-M-yy HH:mm",
                "d-M-yy HH:mm:ss",
                "d-M-yy",
                "d-M-yyyy",
                "yyyy/M/d h:mm tt",
                "yyyy/M/d h:mm:ss tt",
                "yyyy/M/d HH:mm",
                "yyyy/M/d HH:mm:ss",
                "yyyy/M/d",
                "yyyy-M-d h:mm tt",
                "yyyy-M-d h:mm:ss tt",
                "yyyy-M-d HH:mm",
                "yyyy-M-d HH:mm:ss",
                "yyyy-M-d",
                "yyyy-MM-ddTHH:mm:ss",
            };
            @return = DateTime.ParseExact(source, fs,
                System.Globalization.CultureInfo.CurrentCulture,
                System.Globalization.DateTimeStyles.None);
        }
    }
    return @return;
    
        3
  •  0
  •   Jonas Stensved    15 年前

    您知道原始字符串属于哪个区域性吗?如果这样做,则可以在调用Parse()时指定特定于区域性的DateTimeStyle

    DateTime date = DateTime.Parse("<your specific date>", System.Globalization.CultureInfo.GetCultureInfo("<your culture>").DateTimeFormat);
    
        4
  •  0
  •   toxaq    15 年前

    创建一个自定义DateTimeFormatInfo并将其传递到DateTime.Parse文件. 这样地:

    string dateValue = string.Format("{0} {1}", "9/15/2010", "16:12:45");
    var customDateTimeFormatInfo = new DateTimeFormatInfo();
    customDateTimeFormatInfo.FullDateTimePattern = string.Format("{0} {1}", "M/dd/yyyy", "h:mm:ss");
    DateTime dt = DateTime.Parse(dateValue, customDateTimeFormatInfo);
    

    无需逃逸和处理您的“h:mm:ss”罚款无需修改。