SwiftDate日期库使用详解

一、基本介绍

1、什么是SwiftDate?

(1) SwiftDate是一个使用Swift语言编写的Date的封装库,使用它可以很方便的对日期进行处理,方便我们工程对日期显示的格式需求。

(2) SwiftDate功能强大,本身swift相对Objective-C,语法上就要简单很多,操作起来更简单易懂,无论是简单的日期操作,还是复杂的业务逻辑都能满足。如如:

  • 支持数学运算进行日期计算(通过两个日期的+,-操作)
  • 支持比较运算符(通过两个日期的>,<,>=,<=,==)
  • 快速获取日期的部分内容(比如获取一个日期中的年份,月份,日)
  • 提供一系列.toString()方法
  • 提供简便的方法获取(比如:今天,昨天,明天等)

2、安装使用

(1)使用cocoaPods安装(备注: GitHub 上下载最新的代码:https://github.com/malcommac/SwiftDate

pod 'SwiftDate', '~> 6.0.3'

(2)在需要使用SwiftDate的地方,import进来就可以了

import SwiftDate

二、主要概念、主要类

DateInRegion 和 Region

SwiftDate为了提供完整的时间和日期管理的功能,引入了两个重要的新玩意以及相应扩展。

第一个是一个结构体(struct),称为Region:region,它是对一个地理位置在时间体系中的描述,其中包含三个不同的特征:

  • TimeZone:用来定义时区。时区在一定程度上表示了不同地区,因此,地区的名字的可作为时区的名称,例如夏威夷时区,北京时间。类似的,格林尼治时间(GMT)或美国西部时间(PST)的偏移量, 也可以用来表示时区,例如东八区(GMT +8)
  • Calendar: 用来表示日历体系,日历体系定义了年与月的长度与划分。SwiftDate 提供了不同日历的信息,还支持不同日历下时间的计算,例如给出绝对时间值,SwiftDate 可以确定他在指定日历系统下的日期。
  • local: 用来表示当地的时间表述方式。由于各地的文化、语言、规范的不同,时间在各地用不同的分隔符或语法来表示。比如 中国地区一般采用 年-月-日 时:分:表,而美国地区多采用 月-日-年 时:分:秒

另一个是DateInRegion,是在特定的国家地区 Region 下,描述一个自身与具体时区和日历无关的时间Date。这是由于特定的国家地区一般采用固定的时区、日历系统与表述规范,只要声明了国家地区,就包含了以上三个要素。实际应用中,使用DateInRegion可以方便的操作上下文中的日期。

SwiftDate 为您提供相同的函数和属性,以管理带有地区属性的DateInRegion时间实例 和 单纯Date时间实例。

三、基本用法

  1. 时间字符串 转 Date(支持任何格式)

     let date = "2019-06-27 14:30:30".toDate()print("date:\(date!.date)")let date1 = "2019-06-27 14:30".toDate("yyyy-MM-dd HH:mm")print("date1:\(date1!.date)")
    

    执行结果

  2. 创建Date的方式

     let date2 = DateInRegion("2019-06-27 14:30:30")!print("date2:\(date2.date)")let date3 = DateInRegion(seconds: 342000);print("date3:\(date3.date)")let region = Region()let date4 = DateInRegion(components: {$0.year = 2019$0.month = 6$0.day = 27$0.hour = 14$0.minute = 30}, region: region)print("date4:\(date4!.date)")let date5 = DateInRegion(year: 2019, month: 6, day: 27, hour: 14, minute: 30, second: 30, nanosecond: 0, region: region)print("date5:\(date5.date)")
    

    执行结果

  3. 对日期的操作:取一个日期的年、月、日、时、分秒等

     let date6 = Date()print("date6:\(date6)")print("date6:\(date6.year)")print("date6:\(date6.month)")print("date6:\(date6.day)")print("date6:\(date6.hour)")print("date6:\(date6.minute)")print("date6:\(date6.second)")print("date6 本月名称:\(date6.monthName(.default))")print("date6 本日名称:\(date6.weekdayName(.default))")print("date6 本周第一天:\(date6.firstDayOfWeek)")print("date6 本周最后一天:\(date6.lastDayOfWeek)")
    

    执行结果

  4. 对日期的加减操作(获取几天前的日期或者几天后的日期)

     let date7 = Date()print("date7:\(date7)")let date8 = date7 + 1.years + 1.months + 1.dayslet date9 = date7 - 1.years - 2.months - 3.days - 4.hoursprint("date8:\(date8)")print("date9:\(date9)")let date10 = date8 - date9;print("date10:\(date10.year!)年\(date10.month!)月\(date10.day!)日")
    

    执行结果

  5. 日期比较 (>,<,>=,<=,==,!=)

     print("\(date9 > date8)")print("\(date9 > date7)")print("\(date8 >= date7)")
    

    执行结果

  6. 日期的粒度比较(是否童年,同月、同天等)

     let date11 = "2017-12-12 10:30:00".toDate()!.datelet date12 = "2018-12-01 11:30:00".toDate()!.datelet date13 = "2018-12-08 10:30:00".toDate()!.dateprint("日期11:\(date11)")print("日期12:\(date12)")print("日期13:\(date13)")let result = date11.compare(toDate: date12, granularity: .month) == .orderedSamelet result2 = date12.compare(toDate: date13, granularity: .month) == .orderedSameprint("result:\(result)")print("result2:\(result2)")let result3 = date11.isBeforeDate(date12, orEqual: false, granularity: .year)let result4 = date11.isBeforeDate(date12, granularity: .month)print("result3:\(result3)")print("result4:\(result4)")let result5 = date12.isAfterDate(date13, granularity: .month)let result6 = date13.isAfterDate(date11, granularity: .year)print("result5:\(result5)")print("result6:\(result6)")//不指定粒度let result7 = date12.isInRange(date: date11, and: date13) //truelet result8 = date12.isInRange(date: date11, and: date13, orEqual: true, granularity: .day) //trueprint("result7:\(result7)")print("result8:\(result8)")
    

    执行结果

7.常用日期比较

    let date14 = Date("2018-06-24 14:40")!.dateprint("")print("测试日期时间:", date14)print("")print("该日期时间是否是早上:", date14.compare(.isMorning))print("该日期时间是否是下午:", date14.compare(.isAfternoon))print("该日期时间是否是傍晚:", date14.compare(.isEvening))print("该日期时间是否是夜里:", date14.compare(.isNight))print("")print("该日期时间是否是今天:", date14.compare(.isToday))print("该日期时间是否是明天:", date14.compare(.isTomorrow))print("该日期时间是否是昨天:", date14.compare(.isYesterday))print("该日期时间是否是工作日:", date14.compare(.isWeekday))print("该日期时间是否是周末:", date14.compare(.isWeekend))print("该日期时间是否是过去的:", date14.compare(.isInThePast))print("该日期时间是否是将来的:", date14.compare(.isInTheFuture))print("")print("该日期时间是否是本周:", date14.compare(.isThisWeek))print("该日期时间是否是下周:", date14.compare(.isNextWeek))print("该日期时间是否是上周:", date14.compare(.isLastWeek))print("")print("该日期时间是否是今年:", date14.compare(.isThisYear))print("该日期时间是否是明年:", date14.compare(.isNextYear))print("该日期时间是否是去年:", date14.compare(.isLastYear))

执行结果

8.日期排序

    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))")print("\(DateInRegion.oldestIn(list: dates)!.date)")print("\(DateInRegion.newestIn(list: dates)!.date)")

执行结果

四、使用场景

营养秤新项目,我们改用使用swift开发,我们希望在项目中能够轻松自如的管理日期和时区,所以就使用到了SwiftDate这个库,有了“它”在swift里面就可以优雅的处理时间

SwiftDate日期库使用详解相关推荐

  1. Python标准库time详解

    Python标准库time详解 1.time库 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 结构化时间(struct_time ...

  2. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  3. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理

    原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...

  4. linux mysql 静态库_Linux静态库与动态库实例详解

    Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include "test.h" int main(){ te ...

  5. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  6. NodeMCU 之 U8G2 库使用详解

    NodeMCU 之 U8G2 库使用详解 1.指令 u8g2.clearDisplay(); // 清除显示数据及屏幕u8g2.clearBuffer(); // 清Buffer缓冲区的数据u8g2. ...

  7. cJSON库用法详解

    cJSON库用法详解_宁静致远2021的博客-CSDN博客_cjson cJSON库用法详解 问题和需要注意的地方 一.JSON.cJSON简介 1. JSON 简介 2. JSON 语法 3. 开源 ...

  8. mysql weekofmonth_深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解

    深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解 mysql的日期函数. 例子中当前日期:curdate() 是2013年6月24日. YEAR() :显示年mys ...

  9. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

最新文章

  1. uboot中添加hi35xx的GPIO设置
  2. html里五角星怎么打,html怎么显示五角星 几分给几个五角星
  3. kmdjs api reference
  4. T- SQL性能优化详解
  5. CSDN、博客园等6大技术博客平台的写作体验测评
  6. 思维探索者:从问题到答案的思维过程 像侦探一样思考
  7. python中list_python中list方法详解说明
  8. xctf php序列化,xctf一道反序列化题
  9. 【官方教程】Ubuntu 安装 mongoDB
  10. struts2 jsp提交对象数据要这么干
  11. STM32单片机使用注意事项
  12. html中src为空,怎么解决img里面src为空状态下的边框问题
  13. 收集的Word2007技巧大全
  14. 【数学模型】TOPSIS
  15. 多种方法使用c语言读写文件(总结)
  16. 固态硬盘是什么接口_ssd固态硬盘是什么意思,有什么好处,固态硬盘和机械硬盘的区别...
  17. OpenCV-DoG
  18. 网路工程师工作中常用的几款软件
  19. ITRON入门之实时操作系统的特点
  20. 谷歌翻译服务退出中国大陆,使用SwitchyOmega仍需要全文翻译,恢复访问的方法

热门文章

  1. HTTP 协议(网络协议篇一)
  2. 传统保险行业数字化之路,ServiceHot 为其逢山开路
  3. 马拉多纳、格瓦拉、寒春和精神胜利法
  4. IEDA如何设置背景图片
  5. 次世代游戏建模贴图技巧,简直就是双BUG加持!
  6. 快捷指令获取url内容_iphone快捷指令在哪怎么用 苹果ios13快捷指令安装使用教程...
  7. JavaScript DOM 编程艺术 (第二版)学习之5-6章
  8. 搞个好玩的东西,爬虫爬取网络流行语录,并通过python自动发送给qq好友,实现有技术的刷屏哈哈。
  9. 收获 3 亿用户的背后,华为智能助手的征程与野望
  10. gradle构建android项目详解