博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 日历类(NSCalendar)
阅读量:6035 次
发布时间:2019-06-20

本文共 2992 字,大约阅读时间需要 9 分钟。

对于时间的操作在开发中很常见,但有时候我们需要获取到一年后的时间,或者一周后的时间.靠通过秒数计算是不行的.那就牵扯到另外一个日历类(NSCalendar).

下面先简单看一下 NSDate

let date = NSDate()let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH-mm-ss"formatter.stringFromDate(date)// 延迟多少秒为正数 前多少秒为负数let date2 = date.dateByAddingTimeInterval(500) formatter.stringFromDate(date2)// 返回两个时间较早的时间let earlierDate = date.earlierDate(date2)// 返回较晚的时间let laterDate = date.laterDate(date2)

通过上面我们发现计算两天之间的差我们可以推迟3600 *24,一个月呢,有时候30天,有时候31天.那就难以计算了.

下面看看如何使用 NSCalendar.

// 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。 //let calendar = NSCalendar.currentCalendar() // 需要传的是一个字符串, 因为日历可以有很多种 这里选择的是公历let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)  // 8.0以后的新方法  /* 日历的类型  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierGregorian instead")  public let NSGregorianCalendar: String // 公历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierBuddhist instead")  public let NSBuddhistCalendar: String // 佛历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierChinese instead")  public let NSChineseCalendar: String // 农历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierHebrew instead")  public let NSHebrewCalendar: String // 希伯来日历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierIslamic instead")  public let NSIslamicCalendar: String // 伊斯兰日历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierIslamicCivil instead")  public let NSIslamicCivilCalendar: String // 伊斯兰民事日历  @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierJapanese instead")  public let NSJapaneseCalendar: String // 日本日历  @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierRepublicOfChina instead")  public let NSRepublicOfChinaCalendar: String // 中国日历  @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierPersian instead")  public let NSPersianCalendar: String // 波斯日历  @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierIndian instead")  public let NSIndianCalendar: String // 印度日历  @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierISO8601 instead")  public let NSISO8601Calendar: String // 国际标准化组织的国际标准日历  */

有了日历的类我们就方便操作了,这里提供两种方法,

方法一:

// 日期比较的类let adcomps = NSDateComponents() adcomps.year = 1adcomps.month = -1adcomps.day = 1// 追加时间可以一次性设置多值let date5 =  calendar?.dateByAddingComponents(adcomps, toDate: date, options: .WrapComponents) formatter.stringFromDate(date5!)

注意:

  • .WrapComponents无法进位的.也就是说满一月月份不会加1,而是 Day 循环.什么意思呢.

    比如今天是2016-07-07.只是设置adcomps.day = 24.那么得到的结果是2016-07-31;
    那么如果设置adcomps.day = 25呢,得到的结果不是2016-08-01,而是2016-07-01.也就是做 day 在循环,对于month的设置 效果是一样的.
    如果要进位使用其他的可选值
    在 OC 中直接设置 option 的值为0即可;

方法二:

let date6 = calendar?.dateByAddingUnit(.Year, value: 1, toDate: date, options: .WrapComponents)

转载地址:http://lzlhx.baihongyu.com/

你可能感兴趣的文章
利用传入的Type类型来调用范型方法的解决方案
查看>>
Top命令内存占用剖析
查看>>
转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
查看>>
求带分数(蓝桥杯)
查看>>
Bootstrap系列 -- 11. 基础表单
查看>>
Retrofit 入门学习
查看>>
Spring Boot学习笔记
查看>>
python3存入redis是bytes
查看>>
laravel 集合接口
查看>>
C/C++二进制读写png文件
查看>>
thymleaf 常用th 标签
查看>>
RTB 广告系统
查看>>
Linux signal 那些事儿(2)【转】
查看>>
InfluxDB安装及配置
查看>>
Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本号
查看>>
PAT Perfect Sequence (25)
查看>>
java.exe进程来源排查录
查看>>
点滴记录——Ubuntu 14.04中Solr与Tomcat整合安装
查看>>
C++实现KMP模式匹配算法
查看>>
ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
查看>>