ios 开发收藏互联网科技iOS Developer

Swift3.0中关于日期类的使用指引

2017-03-06  本文已影响88人  鱼与愚七

日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相关类的使用都与之前略有不同,这里将会对基于Swift3.0版本的NSDate及相关类的使用进行简短的介绍.

处理日期的常见情景

  1. NSDate -> String & String -> NSDate
  2. 日期比较
  3. 日期计算(基于参考日期 +/- 一定时间)
  4. 计算日期间的差异
  5. 拆解NSDate对象(分解成year/month/day/hour/minute/second 等)

NSDate相关类

  1. NSDate
  2. DateFormatter
  3. DateComponents
  4. DateComponentFormatter
  5. Calendar
  6. Date structure: Swift3.0中引入了Date structure, 和NSDate提供的功能相似, 并且Date结构体和NSDate类可以在Swift中交替使用以此达到和Objective-C APIs的交互. Date结构体的引入和Swift中引入了String, Array等类型一样, 都是为了让对应的类桥接Foundation中对应的类(String -> NSString, Array -> NSArray)

注: 在下面的代码片段中, NSDate和Date会交替使用,功能都是相同的.

基本概念

NSDate和String之间的转换

DateComponents

比较日期和时间

方法1 (earlierDate: || laterDate:)

方法2 (compare: )

方法3 (timeIntervalSinceReferenceDate)

日期的计算

方法1

var calculatedDate = calendar.date(byAdding: Calendar.Unit.month, value: monthsToAdd, to:   currentDate, options: Calendar.Options.init(rawValue: 0))
calculatedDate = calendar.date(byAdding: Calendar.Unit.day, value: daysToAdd, to:   calculatedDate!, options: Calendar.Options.init(rawValue: 0))
print(calculatedDate) // Optional(2016-10-24 08:33:41 +0000)

方法2

日期差值的计算

方法1

方法2

```swift
let interval = date2?.timeIntervalSince(date1!)
var diffString = dateComponentsFormatter.string(from: interval!)
print(diffString) // Optional("-31 years, 6 months, 0 weeks, 3 days, 10 hours, 39 minutes, 39 seconds")
```

方法3

dateComponentsFormatter.allowedUnits = [Calendar.Unit.year]
diffString = dateComponentsFormatter.string(from: date1!, to: date2!)
print(diffString) // Optional("-31 years")

总结

就像我在摘要中说的, 处理日期很常见, 在日常代码中也不可避免, 这里我通过一些小的代码片段介绍了处理日期的一些常见方法. 不管是NSDate类,Date结构体还是与之相关联的类, 它们的目的只有一个, 就是能够快速的处理日期. 如果想深入掌握有关日期的处理, 还是要在日常编码过程中多多练习, 多多阅读官方文档.

上一篇 下一篇

猜你喜欢

热点阅读