NSDate 时间

前言

  • NSDate 时间

    • Objective-C

      1
      @interface NSDate : NSObject <NSCopying, NSSecureCoding>
    • Swift

      1
      public class NSDate : NSObject, NSCopying, NSSecureCoding
    • NSDate 用来表示公历的 GMT 时间(格林威治时间)。是独立与任何历法的,它只是时间相对于某个时间点的时间差;NSDate 是进行日历计算的基础。

  • NSDateComponents

    • Objective-C

      1
      @interface NSDateComponents : NSObject <NSCopying, NSSecureCoding>
    • Swift

      1
      public class NSDateComponents : NSObject, NSCopying, NSSecureCoding
    • NSDateComponents 封装了具体年月日、时秒分、周、季度等。将时间表示成适合人类阅读和使用的方式,通过 NSDateComponents 可以快速而简单地获取某个时间点对应的“年”,“月”,“日”,“时”,“分”,“秒”,“周”等信息。当然一旦涉及了年月日时分秒就要和某个历法绑定,因此 NSDateComponents 必须和 NSCalendar 一起使用,默认为公历。NSDateComponents 除了像上面说的表示一个时间点外,还可以表示时间段,例如:两周,三个月,20年,7天,10分钟,50秒等等。时间段用于日历的计算,例如:获取当前历法下,三个月前的某个时间点。可以说,要获取某个时间点在某个历法下的表示,需要 NSDateComponents; 要计算当前时间点在某个历法下对应的一个时间段前或后的时间点,需要 NSDateComponents。NSDateComponents 返回的 day, week, weekday, month, year 这一类数据都是从 1 开始的。因为日历是给人看的,不是给计算机看的,从 0 开始就是个错误。

  • NSDateFormatter

    • Objective-C

      1
      @interface NSDateFormatter : NSFormatter
    • Swift

      1
      public class NSDateFormatter : NSFormatter
    • NSDateFomatter 表示的时间默认以公历(即阳历)为参考,可以通过设置 calendar 属性变量获得特定历法下的时间表示。

1、NSDate 的创建

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    // 对象方法

    // 当前时间值,GMT 时间
    NSDate *date1 = [[NSDate alloc] init];

    // 当前时间加 n 秒后的值
    NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:10];

    // 某个时间增加 n 秒后的值
    NSDate *date3 = [[NSDate alloc] initWithTimeInterval:10 sinceDate:date2];

    // 从 1970-01-01 00:00:00 (GMT) 增加 n 秒后的值
    NSDate *date4 = [[NSDate alloc] initWithTimeIntervalSince1970:3600];

    // 从 2001-01-01 00:00:00 (GMT) 增加 n 秒后的值
    NSDate *date5 = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:10];

    // 类方法

    // 当前时间值,GMT 时间
    NSDate *date6 = [NSDate date];

    // 当前时间加 n 秒后的值
    NSDate *date7 = [NSDate dateWithTimeIntervalSinceNow:10];

    // 某个时间增加 n 秒后的值
    NSDate *date8 = [NSDate dateWithTimeInterval:10 sinceDate:date2];

    // 从 1970-01-01 00:00:00 (GMT) 增加 n 秒后的值
    NSDate *date9 = [NSDate dateWithTimeIntervalSince1970:3600];

    // 从 2001-01-01 00:00:00 (GMT) 增加 n 秒后的值
    NSDate *date10 = [NSDate dateWithTimeIntervalSinceReferenceDate:10];

    // 未来某一个随机时间
    NSDate *date11 = [NSDate distantFuture];

    // 过去某一个随机时间
    NSDate *date12 = [NSDate distantPast];

    // 指定时间间隔
    /*
    某个时间增加 n 秒后的值
    */
    NSDate *date13 = [date6 dateByAddingTimeInterval:20];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // 当前时间值,GMT 时间
    let date1: NSDate = NSDate()

    // 当前时间加 n 秒后的值
    let date2: NSDate = NSDate(timeIntervalSinceNow: 10)

    // 某个时间增加 n 秒后的值
    let date3: NSDate = NSDate(timeInterval: 10, sinceDate: date2)

    // 从 1970-01-01 00:00:00 (GMT) 增加 n 秒后的值
    let date4: NSDate = NSDate(timeIntervalSince1970: 3600)

    // 从 2001-01-01 00:00:00 (GMT) 增加 n 秒后的值
    let date5: NSDate = NSDate(timeIntervalSinceReferenceDate: 10)

    // 未来某一个随机时间
    let date6: NSDate = NSDate.distantFuture()

    // 过去某一个随机时间
    let date7: NSDate = NSDate.distantPast()

    // 某个时间增加 n 秒后的值
    let date8: NSDate = date5.dateByAddingTimeInterval(20)

2、NSDate 时间间隔的计算

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    NSDate *date1 = [NSDate date];
    NSDate *date2 = [date1 dateByAddingTimeInterval:20];

    // 实例保存的时间 与 当前时间 的时间间隔,单位 秒
    NSTimeInterval interval1 = [date2 timeIntervalSinceNow];

    // 实例保存的时间 与 指定时间 的时间间隔,单位 秒
    NSTimeInterval interval2 = [date2 timeIntervalSinceDate:date1];

    // 实例保存的时间 与 1970-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    NSTimeInterval interval3 = [date1 timeIntervalSince1970];

    // 实例保存的时间 与 2001-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    NSTimeInterval interval4 = [date1 timeIntervalSinceReferenceDate];

    // 当前时间 与 2001-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    NSTimeInterval interval5 = [NSDate timeIntervalSinceReferenceDate];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    let date1 = NSDate()
    let date2 = date1.dateByAddingTimeInterval(20)

    // 实例保存的时间 与 当前时间 的时间间隔,单位 秒
    let interval1: NSTimeInterval = date2.timeIntervalSinceNow

    // 实例保存的时间 与 指定时间 的时间间隔,单位 秒
    let interval2: NSTimeInterval = date2.timeIntervalSinceDate(date1)

    // 实例保存的时间 与 1970-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    let interval3: NSTimeInterval = date1.timeIntervalSince1970

    // 实例保存的时间 与 2001-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    let interval4: NSTimeInterval = date1.timeIntervalSinceReferenceDate

    // 当前时间 与 2001-01-01 00:00:00 (GMT) 的时间间隔,单位 秒
    let interval5: NSTimeInterval = NSDate.timeIntervalSinceReferenceDate()

3、NSDate 时间的比较

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    NSDate *date1 = [NSDate date];
    NSDate *date2 = [date1 dateByAddingTimeInterval:10];

    // isEqualToDate

    // 判断两个时间是否相等
    BOOL bl = [date1 isEqualToDate:date2];

    // compare

    // 比较两个时间大小
    NSComparisonResult result = [date1 compare:date2];

    // earlierDate

    // 比较两个时间,返回 较早的时间
    NSDate *date3 = [date1 earlierDate:date2];

    // laterDate

    // 比较两个时间,返回 较晚的时间
    NSDate *date4 = [date1 laterDate:date2];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let date1 = NSDate()
    let date2 = date1.dateByAddingTimeInterval(20)

    // 判断两个时间是否相等
    let bl: Bool = date1.isEqualToDate(date2)

    // 比较两个时间大小
    let result: NSComparisonResult = date1.compare(date2)

    // 比较两个时间,返回 较早的时间
    let date3 = date1.earlierDate(date2)

    // 比较两个时间,返回 较晚的时间
    let date4 = date1.laterDate(date2)

4、NSDateComponents 的创建

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    // 由手动设置创建
    NSDateComponents *compt1 = [[NSDateComponents alloc] init];

    // 日历
    [compt1 setCalendar:[NSCalendar currentCalendar]];

    // 时区
    [compt1 setTimeZone:[NSTimeZone systemTimeZone]];

    // 纪元
    [compt1 setEra:1];

    // 年
    [compt1 setYear:2016];

    // 月
    [compt1 setMonth:3];

    // 日
    [compt1 setDay:1];

    // 时
    [compt1 setHour:00];

    // 分
    [compt1 setMinute:10];

    // 秒
    [compt1 setSecond:55];

    // 微妙
    [compt1 setNanosecond:280];

    // 刻钟
    [compt1 setQuarter:0];

    // 周几
    [compt1 setWeekday:3];

    // 指定日期为本月的第几个星期几
    [compt1 setWeekdayOrdinal:1];

    // 指定日期为本月的第几周
    [compt1 setWeekOfMonth:1];

    // 指定日期为本年的第几周
    [compt1 setWeekOfYear:10];

    //
    [compt1 setYearForWeekOfYear:2016];

    // 由已知 date 创建
    /*
    只有明确指定了 unitFlags,NSDateComponents 相应的那一部分才有值
    */
    NSDateComponents *compt2 = [[NSCalendar currentCalendar] components:NSCalendarUnitEra
    | NSCalendarUnitYear
    | NSCalendarUnitMonth
    | NSCalendarUnitDay
    | NSCalendarUnitHour
    | NSCalendarUnitMinute
    | NSCalendarUnitSecond
    | NSCalendarUnitNanosecond
    | NSCalendarUnitQuarter
    | NSCalendarUnitWeekday
    | NSCalendarUnitWeekdayOrdinal
    | NSCalendarUnitWeekOfMonth
    | NSCalendarUnitWeekOfYear
    | NSCalendarUnitYearForWeekOfYear
    | NSCalendarUnitCalendar
    | NSCalendarUnitTimeZone

    fromDate:[NSDate date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    // 由手动设置创建

    let compt1: NSDateComponents = NSDateComponents()

    // 日历
    compt1.calendar = NSCalendar.currentCalendar()

    // 时区
    compt1.timeZone = NSTimeZone.systemTimeZone()

    compt1.era = 1 // 纪元
    compt1.year = 2016 // 年
    compt1.month = 3 // 月
    compt1.day = 1 // 日
    compt1.hour = 10 // 时
    compt1.minute = 12 // 分
    compt1.second = 55 // 秒
    compt1.nanosecond = 280 // 微妙
    compt1.quarter = 0 // 刻钟

    compt1.weekday = 3 // 周几
    compt1.weekdayOrdinal = 1 // 指定日期为本月的第几个星期几
    compt1.weekOfMonth = 1 // 指定日期为本月的第几周
    compt1.weekOfYear = 10 // 指定日期为本年的第几周
    compt1.yearForWeekOfYear = 2016 //

    // 由已知 date 创建
    /*
    只有明确指定了 unitFlags,NSDateComponents 相应的那一部分才有值。在 Swift 2.2 中不能使用 “|” 连接两个 Unit 枚举值
    */

    let flag: NSCalendarUnit = [.Era, .Year, .Month, .Day, .Hour, .Minute, .Second, .Nanosecond, .Quarter, .Weekday,
    .WeekdayOrdinal, .WeekOfMonth, .WeekOfYear, .WeekOfYear, .Calendar, .TimeZone]

    let compt2: NSDateComponents = NSCalendar.currentCalendar().components(flag, fromDate: NSDate())

5、NSDateComponents 时间间隔的计算

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    NSDate *date1 = [NSDate date];
    NSDate *date2 = [NSDate dateWithTimeInterval:5*60*60+75 sinceDate:date1];

    NSDateComponents *compt = [[NSCalendar currentCalendar] components:NSCalendarUnitMinute
    | NSCalendarUnitSecond
    fromDate:date1
    toDate:date2
    options:0];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let date1: NSDate = NSDate()
    let date2: NSDate = NSDate(timeInterval: 5*60*60+75, sinceDate: date1)

    let flag: NSCalendarUnit = [.Minute, .Second]

    // 参数 options 不能为 0 ,0 不是一个有效的值。对于没有选项,使用 NSCalendarOptions(rawValue: 0)
    let compt: NSDateComponents = NSCalendar.currentCalendar().components( flag,
    fromDate: date1,
    toDate: date2,
    options: NSCalendarOptions(rawValue: 0))

6、NSDateComponents 与 NSDate 的相互转换

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // NSDate 转 NSDateComponents

    NSDateComponents *compt = [calendar components:NSCalendarUnitYear
    | NSCalendarUnitMonth
    | NSCalendarUnitDay
    fromDate:[NSDate date]];

    // NSDateComponents 转 NSDate

    // 转换时间时,使用默认的时区 GMT 时区
    NSDate *date = [calendar dateFromComponents:compt];

    // 得到本地时间,避免时区问题
    date = [date dateByAddingTimeInterval:[[NSTimeZone systemTimeZone] secondsFromGMTForDate:date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let calendar: NSCalendar = NSCalendar.currentCalendar()

    // NSDate 转 NSDateComponents
    let compt: NSDateComponents = calendar.components([.Year, .Month], fromDate: NSDate())

    // NSDateComponents 转 NSDate

    // 转换时间时,使用默认的时区 GMT 时区
    var date: NSDate = calendar.dateFromComponents(compt)!

    // 得到本地时间,避免时区问题
    let timeInterval = NSTimeZone.systemTimeZone().secondsFromGMT

    date = date.dateByAddingTimeInterval(NSTimeInterval(timeInterval))

7、NSDateComponents 与 NSDate 的计算

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NSDateComponents *compt = [[NSDateComponents alloc] init];
    [compt setDay:25];
    [compt setHour:4];
    [compt setMinute:66];

    // NSDate 加上 NSDateComponents 表示的一段时间
    NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:compt toDate:[NSDate date] options:0];

    // 得到本地时间,避免时区问题
    date = [date dateByAddingTimeInterval:[[NSTimeZone systemTimeZone] secondsFromGMTForDate:date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let compt: NSDateComponents = NSDateComponents()
    compt.day = 25
    compt.hour = 11
    compt.minute = 12

    // NSDate 加上 NSDateComponents 表示的一段时间
    var date: NSDate = NSCalendar.currentCalendar().dateByAddingComponents( compt,
    toDate: NSDate(),
    options: NSCalendarOptions(rawValue: 0))!

    date = date.dateByAddingTimeInterval(NSTimeInterval(NSTimeZone.systemTimeZone().secondsFromGMT))

8、NSDateFormatter 的时间格式化

  • 使用 NSDateFormatter 转换时间字符串时,默认的时区是系统时区,例如在中国一般都是北京时间(+8),如果直接转换会导致结果相差8小时,所以一般的做法是先指定时区为GMT标准时间再转换。

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    G -- 纪元				     一般会显示公元前(BC)和公元(AD)
    y -- 年 假如是2013年,那么 yyyy=2013,yy=13
    M -- 月 假如是3月,那么 M=3,MM=03,MMM=Mar,MMMM=March;假如是11月,那么M=11,MM=11
    MMM=Nov,MMMM=November
    w -- 一年中的第几周 假如是18日,那么 w=2(这一年的第二个周)
    W -- 一个月中的第几周 与日历排列有关,假如是2013421日,那么 W=4(这个月的第四个周)
    F -- 月份包含的周 与日历排列无关,和上面的 W 不一样,F 只是单纯以7天为一个单位来统计周,例如7号一定是第一个周,
    15号一定是第三个周,与日历排列无关。
    D -- 一年中的第几天 假如是120日,那么 D=20(这一年的第20天);假如是225日,那么 D=31+25=56(这一年的第56天)
    d -- 一个月中的第几天 假如是5号,那么 d=5,dd=05 假如是15号,那么 d=15,dd=15
    E -- 星期几 假如是星期五,那么 E=Fri,EEEE=Friday
    a -- 上午(AM)/下午(PM)
    H -- 24小时制 显示为0--23,假如是午夜00:40,那么 H=0:40,HH=00:40
    h -- 12小时制 显示为1--12,假如是午夜00:40,那么 h=12:40
    K -- 12小时制 显示为0--11,假如是午夜00:40,那么 K=0:40,KK=00:40
    k -- 24小时制 显示为1--24,假如是午夜00:40,那么 k=24:40
    m -- 分钟 假如是5分钟,那么 m=5,mm=05;假如是45分钟,那么 m=45,mm=45
    s -- 秒 假如是5秒钟,那么 s=5,ss=05;假如是45秒钟,那么 s=45,ss=45
    S -- 毫秒 一般用 SSS 来显示
    z -- 时区 表现形式为 GMT+08:00
    Z -- 时区 表现形式为 +0800

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 设置时区,不设置时默认的时区是系统时区(GMT+8)
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    // 设置日期格式,以字符串表示的日期形式的格式
    [formatter setDateFormat:@"G yyyy-MM-dd E D F w W a z HH:mm:ss.SSS"];

    // 格式化日期,GMT 时间,NSDate 转 NSString
    NSString *str = [formatter stringFromDate:[NSDate date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    G -- 纪元         	 一般会显示公元前(BC)和公元(AD)
    y -- 年 假如是2013年,那么 yyyy=2013,yy=13
    M -- 月 假如是3月,那么 M=3MM=03MMM=MarMMMM=March
    假如是11月,那么M=11MM=11MMM=NovMMMM=November
    w -- 一年中的第几周 假如是18日,那么 w=2(这一年的第二个周)
    W -- 一个月中的第几周 与日历排列有关,假如是2013421日,那么 W=4(这个月的第四个周)
    F -- 月份包含的周 与日历排列无关,和上面的 W 不一样,F 只是单纯以7天为一个单位来统计周,
    例如7号一定是第一个周,15号一定是第三个周,与日历排列无关。
    D -- 一年中的第几天 假如是120日,那么 D=20(这一年的第20天);假如是225日,那么 D=31+25=56(这一年的第56天)
    d -- 一个月中的第几天 假如是5号,那么 d=5,dd=05 假如是15号,那么 d=15,dd=15
    E -- 星期几 假如是星期五,那么 E=FriEEEE=Friday
    a -- 上午(AM)/下午(PM)
    H -- 24小时制 显示为0--23,假如是午夜00:40,那么 H=0:40HH=00:40
    h -- 12小时制 显示为1--12,假如是午夜00:40,那么 h=12:40
    K -- 12小时制 显示为0--11,假如是午夜00:40,那么 K=0:40KK=00:40
    k -- 24小时制 显示为1--24,假如是午夜00:40,那么 k=24:40
    m -- 分钟 假如是5分钟,那么 m=5,mm=05;假如是45分钟,那么 m=45,mm=45
    s -- 秒 假如是5秒钟,那么 s=5,ss=05;假如是45秒钟,那么 s=45,ss=45
    S -- 毫秒 一般用 SSS 来显示
    z -- 时区 表现形式为 GMT+08:00
    Z -- 时区 表现形式为 +0800

    let formatter: NSDateFormatter = NSDateFormatter()

    // 设置时区,不设置时默认的时区是系统时区(GMT+8)
    formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

    // 设置日期格式,以字符串表示的日期形式的格式
    formatter.dateFormat = "G yyyy-MM-dd E D F w W a z HH:mm:ss.SSS"

    // 格式化日期,GMT 时间,NSDate 转 NSString
    let str: String = formatter.stringFromDate(NSDate())

9、1437494603 (秒) 格式 转 YYYY-MM-dd HH:mm:ss 格式

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 计算日期
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:1437494603];

    // 创建时间戳
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 设置日期格式,以字符串表示的日期形式的格式
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    // 转换成指定的格式
    NSString *string = [formatter stringFromDate:date];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 计算日期
    let date: NSDate = NSDate(timeIntervalSince1970: 1437494603)

    // 创建时间戳
    let formatter: NSDateFormatter = NSDateFormatter()

    // 设置日期格式,以字符串表示的日期形式的格式
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

    // 转换成指定的格式
    let str: String = formatter.stringFromDate(date)

10、NSDate 与 NSString 的相互转换

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 设置时区 GMT
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    // 加入一些别的英文字符串时,需用单引号来引入
    [formatter setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒 'iOS Date Test'"];

    // NSString 转 NSDate
    NSDate *date = [formatter dateFromString:@"2016年01月12日 1点8分50秒"];

    // NSDate 转 NSString
    NSString *str = [formatter stringFromDate:date];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let formatter: NSDateFormatter = NSDateFormatter()

    // 设置时区,不设置时默认的时区是系统时区(GMT+8)
    formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

    // 加入一些别的英文字符串时,需用单引号来引入
    formatter.dateFormat = "yyyy年MM月dd日 HH点mm分ss秒 'iOS Date Test'"

    // NSString 转 NSDate
    let date: NSDate = formatter.dateFromString("2016年01月12日 1点8分50秒")!

    // NSDate 转 NSString
    let str: String = formatter.stringFromDate(date)

11、时区差值转换

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 得到当前时间(世界标准时间 UTC/GMT)
    NSDate *date = [NSDate date];

    // 设置系统时区为本地时区
    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    // 计算本地时区与 GMT 时区的时间差
    NSInteger interval = [zone secondsFromGMT];

    // 在 GMT 时间基础上追加时间差值,得到本地时间
    date = [date dateByAddingTimeInterval:interval];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 得到当前时间(世界标准时间 UTC/GMT)
    var date: NSDate = NSDate()

    // 设置系统时区为本地时区
    let zone: NSTimeZone = NSTimeZone.systemTimeZone()

    // 计算本地时区与 GMT 时区的时间差
    let second: Int = zone.secondsFromGMT

    // 在 GMT 时间基础上追加时间差值,得到本地时间
    date = date.dateByAddingTimeInterval(NSTimeInterval(second))
文章目录
  1. 1. 前言
  2. 2. 1、NSDate 的创建
  3. 3. 2、NSDate 时间间隔的计算
  4. 4. 3、NSDate 时间的比较
  5. 5. 4、NSDateComponents 的创建
  6. 6. 5、NSDateComponents 时间间隔的计算
  7. 7. 6、NSDateComponents 与 NSDate 的相互转换
  8. 8. 7、NSDateComponents 与 NSDate 的计算
  9. 9. 8、NSDateFormatter 的时间格式化
  10. 10. 9、1437494603 (秒) 格式 转 YYYY-MM-dd HH:mm:ss 格式
  11. 11. 10、NSDate 与 NSString 的相互转换
  12. 12. 11、时区差值转换
隐藏目录