我有一个急速的问题,因为我不能完全理解swift Date()对象,所以我无法理解。
我有一个存储在变量格式中的字符串,如下所示: " YYYY-MM-DD' T' HH:MM:SSZ"
例如,日期字符串可能是" 2014-08-21T19:32:00Z"
我想在swift中区分日期时间和当前日期时间。我知道您可以使用DateFormatter对象类似地格式化swift日期,但是如何获得两者之间的偏移?理想情况下,差异将以这样的方式返回,即我可以提取日,小时,分钟等。 谢谢。
答案 0 :(得分:1)
您必须使用配置了正确的ISO 8601格式字符串的日期格式化程序将字符串转换为Date
。如果您定位iOS 10或更高版本,则可以使用非常方便的ISO8601DateFormatter
。
一旦你有2个日期对象,就可以很容易地找出2之间的区别。如果你想把这个差异变回可读的东西,我建议{{{ 1}}或DateIntervalFormatter
,具体取决于您的使用案例。我已经提供了两种不同的方式来访问年,周,日等。
DateComponentsFormatter
输出:
2岁,11个月,20天,4小时,41分钟,32秒
年:2个月:11天:20小时:4分钟:41秒:32纳秒:864941162 isLeapMonth:false
答案 1 :(得分:1)
您需要将字符串日期转换为快速日期,然后才能进行比较。
我有同样的任务,其中日期可能在JSON结果中,也可能不在JSON结果中,所以我写了这个方便的小函数来获取日期(根据需要更改日期格式 - 我有两种可能的格式):
curl
然后您需要使用日历和日历组件。
func getDateFromString(_ dateString: String?) -> Date? {
guard let dateString = dateString else {
return nil
}
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
var date: Date?
date = dateFormatter.date(from: dateString)
if date == nil {
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
date = dateFormatter.date(from: dateString)
}
return date
}