使用任何分隔符解析日期

时间:2017-05-20 11:45:12

标签: c# parsing datetime

我有一个对象存储有关其内容的信息。

var columnType = new ColumnType
    {
        ColumnName = "DateTime D/M/Y",
        ColType = typeof (DateTime),
        Format = "ddMMyyyy HH:mm"
    }

基于此我需要在将行添加到此列之前解析行。问题是我的格式不包含分隔符。我想解析日期,无论什么分隔符。

标准DateTime.Parse没有格式化的构造函数,DateTime.ParseExact期望指定的格式中已包含分隔符。

我需要能解析日期的东西: 如果我的格式是ddMMyyyy HH:mm,那么:

05.03.2016 04:19 - >解析

05-03-2016 04:19 - >解析

05/03/2016 - >解析(时间应该是可选的)

2016/03/05 04:19 - >错误

我尝试这样做,但format中没有分隔符,但它没有工作:

var format = "ddMMyyyy HH:mm";
DateTime.TryParseExact("05.03.2016 04:19", format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime resultValue);

2 个答案:

答案 0 :(得分:0)

这样的事可能适合你。第一段代码不会处理可选时间,请参阅下文。

let root: [String: Any] = ["Categories": [ ["deviceList": ["1","2","3","4"]], ["deviceList": ["5","6","7","8"]]  ]]

if let categories = root["Categories"] as? [Any] {

    var deviceLists: [String] = []
    for cat in categories {
        if let cat = cat as? [String: Any], let deviceNames = cat["deviceList"] as? [String] {
            deviceLists.append(contentsOf: deviceNames)
        }
    }
    print(deviceLists)
}

这可以通过使用DateTime.TryParseExact来接受字符串数组格式,而不是一种格式。这是因为:

  

字符串表示的格式必须至少与指定格式中的一种完全匹配。

必须注意的是,输入字符串中的所有分隔符必须相同,不能混用和匹配。

对于可选时间,您可以添加不包含char[] separators = { '/', '-', '.', '@', '#' }; string format = "dd?MM?yyyy HH:mm"; // ? replaced with each separator // Create and populate an array of all acceptable formats string[] formats = new string[separators.Length]; for (int i = 0; i < separators.Length; i++) { formats[i] = format.Replace('?', separators[i]); } DateTime dt; if (DateTime.TryParseExact("05#12#2017 15:36", formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) { // Use dt } else { // No format matched } 的其他格式。例如:

HH:mm

答案 1 :(得分:0)

IFormatProvider根据var ci = new CultureInfo("pl"); var d1 = DateTime.Parse("05.03.2016 04:19", ci); var d2 = DateTime.Parse("05-03-2016 04:19", ci); var d3 = DateTime.Parse("05/03/2016" , ci); var d4 = DateTime.Parse("2016/03/05 04:19", ci);

处理样本
{{1}}