返回

时间基础知识: NSDate, NSTimeZone, NSLocale, NSDateComponents, NSCalendar, NSDateFormatter

IOS

NSDate

NSDate类表示一个特定日期和时间。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSDate对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用dateWithString:方法从字符串创建NSDate对象。例如:
let date = NSDate(string: "2020-03-08 12:00:00")
  • 从时间戳创建:可以使用dateWithTimeIntervalSince1970:方法从时间戳创建NSDate对象。例如:
let date = NSDate(timeIntervalSince1970: 1583702400)
  • 从日期组件创建:可以使用dateWithDateComponents:方法从日期组件创建NSDate对象。例如:
let dateComponents = NSDateComponents()
dateComponents.year = 2020
dateComponents.month = 3
dateComponents.day = 8
dateComponents.hour = 12
dateComponents.minute = 0
dateComponents.second = 0

let date = NSCalendar.current.date(from: dateComponents)!

NSTimeZone

NSTimeZone类表示一个时区。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSTimeZone对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用timeZoneWithName:方法从字符串创建NSTimeZone对象。例如:
let timeZone = NSTimeZone(name: "Asia/Shanghai")
  • 从缩写创建:可以使用timeZoneWithAbbreviation:方法从缩写创建NSTimeZone对象。例如:
let timeZone = NSTimeZone(abbreviation: "CST")

NSLocale

NSLocale类表示一个地域设置。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSLocale对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用localeWithLocaleIdentifier:方法从字符串创建NSLocale对象。例如:
let locale = NSLocale(localeIdentifier: "en_US")
  • 从国家和语言创建:可以使用localeWithCountryCoder:languageCode:方法从国家和语言创建NSLocale对象。例如:
let locale = NSLocale(localeIdentifier: "US", languageCode: "en")

NSDateComponents

NSDateComponents类表示一个日期和时间组件。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSDateComponents对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用dateComponentsWithString:方法从字符串创建NSDateComponents对象。例如:
let dateComponents = NSDateComponents(string: "2020-03-08 12:00:00")
  • 从日期和时间创建:可以使用dateComponentsFromDate:方法从日期和时间创建NSDateComponents对象。例如:
let date = NSDate()
let dateComponents = NSCalendar.current.components([.year, .month, .day, .hour, .minute, .second], from: date)
  • 从另一个NSDateComponents对象创建:可以使用dateComponentsWithDateComponents:方法从另一个NSDateComponents对象创建NSDateComponents对象。例如:
let dateComponents1 = NSDateComponents()
dateComponents1.year = 2020
dateComponents1.month = 3
dateComponents1.day = 8

let dateComponents2 = NSDateComponents(dateComponents: dateComponents1)
dateComponents2.hour = 12
dateComponents2.minute = 0
dateComponents2.second = 0

NSCalendar

NSCalendar类表示一个日历。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSCalendar对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用calendarWithIdentifier:方法从字符串创建NSCalendar对象。例如:
let calendar = NSCalendar(identifier: "gregorian")
  • 从日期和时区创建:可以使用calendarWithDate:timeZone:方法从日期和时区创建NSCalendar对象。例如:
let date = NSDate()
let timeZone = NSTimeZone(name: "Asia/Shanghai")
let calendar = NSCalendar(date: date, timeZone: timeZone)

NSDateFormatter

NSDateFormatter类用于格式化日期和时间。它是一个不可变类,这意味着一旦创建,就不能再更改其值。NSDateFormatter对象可以使用多种方式创建,包括:

  • 从字符串创建:可以使用dateFormatterWithString:方法从字符串创建NSDateFormatter对象。例如:
let dateFormatter = NSDateFormatter(string: "yyyy-MM-dd HH:mm:ss")
  • 从日期格式化器样式创建:可以使用dateFormatterWithDateStyle:timeStyle:方法从日期格式化器样式创建NSDateFormatter对象。例如:
let dateFormatter = NSDateFormatter(dateStyle: .LongStyle, timeStyle: .ShortStyle)

使用示例

以下是一些使用NSDate、NSTimeZone、NSLocale、NSDateComponents、NSCalendar、NSDateFormatter的示例:

  • 获取当前日期和时间:
let date = NSDate()
  • 将字符串转换为日期:
let date = NSDate(string: "2020-03-08 12:00:00")
  • 将日期转换为字符串:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = dateFormatter.stringFromDate(date)
  • 将日期添加到另一个日期:
let calendar = NSCalendar.current
let dateComponents = NSDateComponents()
dateComponents.day = 1
let newDate = calendar.dateByAddingComponents(dateComponents, toDate: date, options: [])
  • 获取日期的年份:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.year], fromDate: date)
let year = dateComponents.year
  • 获取日期的月份:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.month], fromDate: date)
let month = dateComponents.month
  • 获取日期的日:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.day], fromDate: date)
let day = dateComponents.day
  • 获取日期的小时:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.hour], fromDate: date)
let hour = dateComponents.hour
  • 获取日期的分钟:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.minute], fromDate: date)
let minute = dateComponents.minute
  • 获取日期的秒:
let calendar = NSCalendar.current
let dateComponents = calendar.components([.second], fromDate: date)
let second = dateComponents.second
  • 获取日期所在的时区:
let timeZone = date.timeZone
  • 获取日期所在的地域设置:
let locale = date.locale
  • 创建一个日期组件对象:
let dateComponents = NSDateComponents()
dateComponents.year = 2020
dateComponents.month = 3
dateComponents.day = 8
dateComponents.hour = 12
dateComponents.minute = 0
dateComponents.second = 0
  • 使用日期组件对象创建一个日期:
let calendar = NSCalendar.current
let date = calendar.dateFromComponents(dateComponents)!
  • 格式化日期:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = dateFormatter.stringFromDate(date)
  • 解析日期:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = dateFormatter.dateFromString(dateString)