美文网首页
第三方日期处理库SwiftDate使用详解

第三方日期处理库SwiftDate使用详解

作者: Small_Potato | 来源:发表于2020-06-20 09:51 被阅读0次

    SwiftDate基本用法

    1,日期解析(String 转 Date)

    1)通过默认格式解析

    let date = "2018-12-12 10:30:00".toDate()
    print("日期:", date!.date)
    

    2)使用指定格式解析

    let _ = "2018-12-12 10:30".toDate("yyyy-MM-dd HH:mm")
    

    3)从一些常见的日期时间格式(ISO8601,RSS,Alt RSS,.NET,SQL,HTTP ...)解析。

    //解析ISO8601日期
    let date1 = "2018-12-17T11:59:29+02:00".toISODate()
     
    //解析RSS日期
    let date2 = "19 Nov 2018 22:20:40 +0100".toRSSDate(alt: true)
    
    2,使用 DateInRegion 创建 Date

    1)我们可以从字符串,时间间隔或使用日期组件创建新日期。下面使用默认的地区 Region。

    //从字符串创建
    let date1 = DateInRegion("2018-08-08 08:00:00")!
    print("data1:", date1.date)
     
    //从时间间隔创建
    let date2 = DateInRegion(seconds: 39940)
    let date3 = DateInRegion(milliseconds: 5000)
    print("data2:", date2.date)
    print("data3:", date3.date)
     
    //通过指定日期各部分创建(方式1)
    let data4 = DateInRegion(components: {
        $0.year = 2014
        $0.month = 9
        $0.day = 11
        $0.hour = 12
        $0.minute = 0
    }, region: region)
    print("data4:", data4!.date)
     
    //通过指定日期各部分创建(方式2)
    let date5 = DateInRegion(year: 2015, month: 1, day: 5,
                         hour: 23, minute: 30, second: 0)
    print("data5:", date5.date)
    

    2)我们也可以使用指定地区 Region(Timezone, Calendar & Locale)创建 Date,与上面相比就是多了个 region 参数。

    //指定一个Region
    let rome = Region(calendar: Calendars.gregorian, zone: Zones.europeRome,
                      locale: Locales.italian)
             
    //从字符串创建
    let date1 = DateInRegion("2018-08-08 08:00:00", region: rome)!
    print("data1:", date1.date)
     
    //从时间间隔创建
    let date2 = DateInRegion(seconds: 39940, region: rome)
    let date3 = DateInRegion(milliseconds: 5000, region: rome)
    print("data2:", date2.date)
    print("data3:", date3.date)
     
    //通过指定日期各部分创建(方式1)
    let data4 = DateInRegion(components: {
        $0.year = 2014
        $0.month = 9
        $0.day = 11
        $0.hour = 12
        $0.minute = 0
    }, region: rome)
    print("data4:", data4!.date)
     
    //通过指定日期各部分创建(方式2)
    let date5 = DateInRegion(year: 2015, month: 1, day: 5,
                         hour: 23, minute: 30, second: 0, region: rome)
    print("data5:", date5.date)
    
    3,日期提取
    let date = Date()
    print("当前日期:", date)
    print("年:", date.year)
    print("月:", date.month)
    print("日:", date.day)
    print("时:", date.hour)
    print("分:", date.minute)
    print("秒:", date.second)
    print("本月名称:", date.monthName(.default))
    print("本日名称:", date.weekdayName(.default))
    print("本周第一天:", date.firstDayOfWeek)
    print("本周最后一天:", date.lastDayOfWeek)
    
    4,日期格式化输出
    let date = "2018-12-12 10:30:00".toDate()!
    //不转换时区
    print("时间1:", date.toFormat("yyyy-MM-dd HH:mm:ss"))
    //转换时区(东8区)
    print("时间2:", date.convertTo(timezone: TimeZone.current)
        .toFormat("yyyy-MM-dd HH:mm:ss"))
    

    2)输出一个时间相对于当前时间的格式(5分钟前、一小时前...),常用于消息、信息的时间显示。

    let r1 = (Date() - 2.years).toRelative(style: RelativeFormatter.defaultStyle(),
                                            locale: Locales.chinese) //2年前
    let r2 = (Date() - 10.months).toRelative(style: RelativeFormatter.defaultStyle(),
                                             locale: Locales.chinese) //10个月前
    let r3 = (Date() - 3.weeks).toRelative(style: RelativeFormatter.defaultStyle(),
                                             locale: Locales.chinese)  //3周前
    let r4 = (Date() - 5.days).toRelative(style: RelativeFormatter.defaultStyle(),
                                             locale: Locales.chinese)  //5天前
    let r5 = (Date() - 12.hours).toRelative(style: RelativeFormatter.defaultStyle(),
                                          locale: Locales.chinese)  //12小时前
    let r6 = (Date() - 30.minutes).toRelative(style: RelativeFormatter.defaultStyle(),
                                            locale: Locales.chinese)  //30分钟前
    let r7 = (Date() - 30.seconds).toRelative(style: RelativeFormatter.defaultStyle(),
                                              locale: Locales.chinese)  //现在
             
    let r8 = (Date() + 30.seconds).toRelative(style: RelativeFormatter.defaultStyle(),
                                              locale: Locales.chinese)  //现在
    let r9 = (Date() + 30.minutes).toRelative(style: RelativeFormatter.defaultStyle(),
                                              locale: Locales.chinese)  //30分钟后
    let r10 = (Date() + 12.hours).toRelative(style: RelativeFormatter.defaultStyle(),
                                            locale: Locales.chinese)  //12小时后
    let r11 = (Date() + 5.days).toRelative(style: RelativeFormatter.defaultStyle(),
                                          locale: Locales.chinese)  //5天后
    let r12 = (Date() + 3.weeks).toRelative(style: RelativeFormatter.defaultStyle(),
                                           locale: Locales.chinese)  //3周后
    let r13 = (Date() + 10.months).toRelative(style: RelativeFormatter.defaultStyle(),
                                             locale: Locales.chinese) //10个月后
    let r14 = (Date() + 2.years).toRelative(style: RelativeFormatter.defaultStyle(),
                                           locale: Locales.chinese) //2年后
    
    

    3)使用 .toClock() 方法将 TimeInterval 输出成“时:分:秒”形式。

    let interval: TimeInterval = (2.hours.timeInterval) + (34.minutes.timeInterval)
        + (5.seconds.timeInterval)
    print("倒计时:", interval.toClock())
    
    5,闰年、闰月的判断
    let date = "2000-03-12 10:30:00".toDate()!.date
    print("测试时间:", date)
    print("是否是润年:", date.isLeapYear)
    print("是否是闰月:", date.isLeapMonth)
    
    6、日期操作、计算

    1)对一个日期进行加减计算。

    let date0 = Date()
    print("当前日期:", date0)
     
    let date1 = date0 + 1.years + 1.months + 1.days
    print("计算后的日期1:", date1)
             
    let date2 = date0 - 1.hours
    print("计算后的日期2:", date2)
    

    2)两个日期相减

    let date1 = Date()
    let date2 = date1 + 1.years + 1.months + 1.days
    print("日期1:", date1)
    print("日期2:", date2)
    let tem = date2 - date1
    print("两个日期相差:\(tem.year!)年\(tem.month!)月\(tem.day!)天")
    
    7、日期比较

    1)使用标准数学运算符(>、>=、<、<=、==)比较两个日期。

    let date1 = "2018-12-12 10:30:00".toDate()!.date
    let date2 = "2020-01-01 11:30:00".toDate()!.date
    let date3 = "2020-01-01 11:30:00".toDate()!.date
             
    print("日期1 >= 日期2:", date1 >= date2)
    print("日期2 == 日期3:", date2 == date3)
    

    2)也可以按指定的粒度比较两个日期。

    let date1 = "2017-12-12 10:30:00".toDate()!.date
    let date2 = "2018-12-01 11:30:00".toDate()!.date
    let date3 = "2018-12-08 10:30:00".toDate()!.date
    print("日期1:\(date1)")
    print("日期2:\(date2)")
    print("日期3:\(date3)")
     
    let result1 = date1.compare(toDate: date2, granularity: .month) == .orderedSame
    print("日期1与日期2年月是否相同:\(result1)")
             
    let result2 = date1.isBeforeDate(date2, orEqual: false, granularity: .year)
    print("日期1的年份是否在日期2年份前面:\(result2)")
             
    let result3 = date3.isAfterDate(date2, orEqual: true, granularity: .month)
    print("日期3是否在日期3之后的年月、或者统一年月:\(result3)")
    

    3)判断一个日期是否在一个日期范围中

    let date1 = "2017-12-12 10:30:00".toDate()!.date
    let date2 = "2018-12-01 11:30:00".toDate()!.date
    let date3 = "2018-12-08 10:30:00".toDate()!.date
     
    //不指定粒度
    date2.isInRange(date: date1, and: date3) //true
     
    //指定粒度
    date2.isInRange(date: date1, and: date3, orEqual: true, granularity: .day) //true
    

    4)判断一个日期是否接近另一个日期(可指定精度)

    let date1 = "2018-12-12 10:30:00".toDate()!.date
    let date2 = "2018-12-13 09:30:00".toDate()!.date
     
    var result = date1.compareCloseTo(date2, precision: 1.days.timeInterval)
    print("两个日期相差小于一天:\(result)")  //true
    

    5)与内置的常用日期进行比较

    let date = "2018-11-22 22:30:00".toDate()!.date
    print("测试日期时间:", date)
    print("")
    print("该日期时间是否是早上:", date.compare(.isMorning))
    print("该日期时间是否是下午:", date.compare(.isAfternoon))
    print("该日期时间是否是傍晚:", date.compare(.isEvening))
    print("该日期时间是否是夜里:", date.compare(.isNight))
    print("")
    print("该日期时间是否是今天:", date.compare(.isToday))
    print("该日期时间是否是明天:", date.compare(.isTomorrow))
    print("该日期时间是否是昨天:", date.compare(.isYesterday))
    print("该日期时间是否是工作日:", date.compare(.isWeekday))
    print("该日期时间是否是周末:", date.compare(.isWeekend))
    print("该日期时间是否是过去的:", date.compare(.isInThePast))
    print("该日期时间是否是将来的:", date.compare(.isInTheFuture))
    print("")
    print("该日期时间是否是本周:", date.compare(.isThisWeek))
    print("该日期时间是否是下周:", date.compare(.isNextWeek))
    print("该日期时间是否是上周:", date.compare(.isLastWeek))
    print("")
    print("该日期时间是否是今年:", date.compare(.isThisYear))
    print("该日期时间是否是明年:", date.compare(.isNextYear))
    print("该日期时间是否是去年:", date.compare(.isLastYear))
    
    8、日期集合的排序、获取首尾日期

    1)将一个日期数组升序、降序排列。

    let dates = ["2018-11-22 22:30:00".toDate()!,
                 "2017-11-01 01:30:00".toDate()!,
                 "2019-11-01 10:30:00".toDate()!]
     
    print("排序前:", dates)
    print("降序排列:", DateInRegion.sortedByNewest(list: dates))
    print("升序排列:", DateInRegion.sortedByOldest(list: dates))
    

    2)获取一个日期数组中最早、最新的一个日期。

    let dates = ["2018-11-22 22:30:00".toDate()!,
                 "2017-11-01 01:30:00".toDate()!,
                 "2019-11-01 10:30:00".toDate()!]
     
    print("最早的一个日期:", DateInRegion.oldestIn(list: dates)!.date)
    print("最新的一个日期:", DateInRegion.newestIn(list: dates)!.date)
    

    相关文章

      网友评论

          本文标题:第三方日期处理库SwiftDate使用详解

          本文链接:https://www.haomeiwen.com/subject/eurwxktx.html