我有一个对象存储有关其内容的信息。
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);
答案 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}}