0
提取日期,使用以下过于复杂的代码的日期几乎可以从一个字符串中提取:Swift3从自定义格式字符串
let dateStringArray:[String] = ["29-01-2017 10:41:18:825325012","29-01-2017 10:41:18:894631028"]
let formatString = "dd-MM-yyyy HH:mm:ss:nnnnnnnnn"
let dayRange = formatString.range(of: "dd")
let monthRange = formatString.range(of: "MM")
let yearRange = formatString.range(of: "yyyy")
let hourRange = formatString.range(of: "HH")
let minuteRange = formatString.range(of: "mm")
let secondRange = formatString.range(of: "ss")
let nanoRange = formatString.range(of:"nnnnnnnnn")
let dateString = dateStringArray[0]
let dateComponents = DateComponents(year:Int(dateString.substring(with: yearRange!)),
month:Int(dateString.substring(with: monthRange!)),
day:Int(dateString.substring(with: dayRange!)),
hour:Int(dateString.substring(with: hourRange!)),
minute:Int(dateString.substring(with: minuteRange!)),
second:Int(dateString.substring(with: secondRange!)),
nanosecond:Int(dateString.substring(with: nanoRange!)))
let nano = Int(dateString.substring(with: nanoRange!))
let currentCalendar = Calendar.current
let dateExtracted = currentCalendar.date(from: dateComponents)
print("\(dateExtracted!)")
从最终打印的输出是:“2017年1月29日10 :41:18 +0000 \ n“
有问题,这(1)必须有一个更简单的方法。 (2)&更重要的是,为什么纳秒分量显然不出现?
作品谢谢。如果实际精度为毫秒,则.nanosecond的使用会引起误解。纳秒的值是从第一个实例的Date()中提取的!我在哪里可以找到通知使用SSSSSSSSS进行秒秒的参考? – user2196409
@ user2196409:http://unicode.org/reports/tr35/tr35-dates.html#dfst-second –
@ user2196409:'Date'在内部表示为浮点数(Double),因此精度有限。如果你用'“29-01-2017 10:41:18:825325014”'试试你的代码,那么提取的纳秒仍然是'825325012'。所以你不能指望纳秒总是完全保留。 (如果你需要,然后使用'DateComponents'而不是'Date')。 - 'DateFormatter'有额外的“bug”,它只能工作到毫秒。如果这是一个问题,那么不要使用DateFormatter。 –