取字符串(JSON格式)日期和快速日期之间的差异

时间:2017-08-10 23:27:26

标签: javascript json swift date datetime

我有一个急速的问题,因为我不能完全理解swift Date()对象,所以我无法理解。

我有一个存储在变量格式中的字符串,如下所示: " YYYY-MM-DD' T' HH:MM:SSZ"

例如,日期字符串可能是" 2014-08-21T19:32:00Z"

我想在swift中区分日期时间和当前日期时间。我知道您可以使用DateFormatter对象类似地格式化swift日期,但是如何获得两者之间的偏移?理想情况下,差异将以这样的方式返回,即我可以提取日,小时,分钟等。 谢谢。

2 个答案:

答案 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   
}