NSTimeZone 时区

前言

  • NSTimeZone 时区

    • Objective-C

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

      1
      public class NSTimeZone : NSObject, NSCopying, NSSecureCoding
    • NSTimeZone 表示时区信息。

1、NSTimeZone 时区的创建

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    NSTimeZone *zone1 = [[NSTimeZone alloc] init];

    // 根据时区名称创建
    NSTimeZone *zone2 = [[NSTimeZone alloc] initWithName:@"America/Chicago"];
    NSTimeZone *zone3 = [NSTimeZone timeZoneWithName:@"America/Chicago"];

    // 根据时区缩写创建
    NSTimeZone *zone4 = [NSTimeZone timeZoneWithAbbreviation:@"EST"];

    // 根据零时区的秒数偏移量创建
    NSTimeZone *zone5 = [NSTimeZone timeZoneForSecondsFromGMT:28800];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    // 根据时区名称创建
    let zone1: NSTimeZone? = NSTimeZone(name: "America/Chicago")

    // 根据时区缩写创建
    let zone2: NSTimeZone? = NSTimeZone(abbreviation: "EST")

    // 根据零时区的秒数偏移量创建,+28800 为 GMT+8,即北京时间(+8)
    let zone3: NSTimeZone = NSTimeZone(forSecondsFromGMT: +28800)

2、NSTimeZone 时区的设置

  • 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
    // 设置默认的时区
    [NSTimeZone setDefaultTimeZone:[[NSTimeZone alloc] initWithName:@"America/Chicago"]];

    NSTimeZone *systemZone = [NSTimeZone systemTimeZone];

    // 本地时区可以被修改,而系统时区不能修改。
    NSTimeZone *localZone = [NSTimeZone localTimeZone];

    NSTimeZone *defaultZone = [NSTimeZone defaultTimeZone];

    // NSCalendar 设置时区
    /*
    设置时区,设置为 GMT+8,即北京时间(+8)
    */
    NSCalendar *calendar = [NSCalendar currentCalendar];

    [calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CET"]];
    [calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:+28800]];

    // NSDateFormatter 设置时区
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // 设置时区,设置为 GMT
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
  • 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
    // 设置默认的时区
    NSTimeZone.setDefaultTimeZone(NSTimeZone(name: "America/Chicago")!)

    let defaultZone = NSTimeZone.defaultTimeZone()

    let systemZone = NSTimeZone.systemTimeZone()

    // 本地时区可以被修改,而系统时区不能修改
    let localZone = NSTimeZone.localTimeZone()

    // NSCalendar 设置时区

    let calendar: NSCalendar = NSCalendar.currentCalendar()

    // 设置时区,设置为 GMT+8,即北京时间(+8)
    calendar.timeZone = NSTimeZone(abbreviation: "EST")!

    // 设置时区,设置为 GMT+8,即北京时间(+8)
    calendar.timeZone = NSTimeZone(forSecondsFromGMT: +28800)

    // NSDateFormatter 设置时区

    let formatter: NSDateFormatter = NSDateFormatter()

    formatter.timeZone = NSTimeZone(forSecondsFromGMT: +28800)

3、NSTimeZone 时区的获取

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    // 获取系统时区
    NSTimeZone *zone1 = [NSTimeZone systemTimeZone];

    // 获取本地时区
    NSTimeZone *zone2 = [NSTimeZone localTimeZone];

    // 获取默认时区
    NSTimeZone *zone3 = [NSTimeZone defaultTimeZone];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    // 获取系统时区
    let systemZone = NSTimeZone.systemTimeZone()

    // 获取本地时区
    let localZone = NSTimeZone.localTimeZone()

    // 获取默认时区
    let defaultZone = NSTimeZone.defaultTimeZone()

4、获取时区的名称

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    // 获取所有已知的时区名称
    NSArray *zoneNames = [NSTimeZone knownTimeZoneNames];

    NSTimeZone *zone = [NSTimeZone localTimeZone];

    // 获取指定时区的名称
    NSString *strZoneName = [zone name];
  • Swift

    1
    2
    3
    4
    5
    // 获取所有已知的时区名称
    let zoneNames = NSTimeZone.knownTimeZoneNames()

    // 获取指定时区的名称
    let localZoneName = NSTimeZone.localTimeZone().name

5、获取时区的缩写

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 获取所有已知的时区缩写
    NSDictionary *zoneAbbreviations = [NSTimeZone abbreviationDictionary];

    NSTimeZone *zone = [NSTimeZone localTimeZone];

    // 获取指定时区的缩写
    NSString *zoneAbbreviation1 = [zone abbreviation];

    // 获取指定时间所在时区名称缩写
    NSString *zoneAbbreviation2 = [zone abbreviationForDate:[NSDate date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    // 获取所有已知的时区缩写
    let zoneAbbreviations = NSTimeZone.abbreviationDictionary()

    // 获取指定时区的缩写
    let localZoneAbbreviation = NSTimeZone.localTimeZone().abbreviation

    // 获取指定时间所在时区名称缩写
    let dateLocalAbbreviation = NSTimeZone.localTimeZone().abbreviationForDate(NSDate())

6、获取与零时区的间隔秒数

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    NSTimeZone *zone = [NSTimeZone localTimeZone];

    // 获取当前时区与零时区的间隔秒数
    NSInteger seconds1 = [zone secondsFromGMT];

    // 获取指定时间所在时区与零时区的间隔秒数
    NSInteger seconds2 = [zone secondsFromGMTForDate:[NSDate date]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    let zone = NSTimeZone.localTimeZone()

    // 获取当前时区与零时区的间隔秒数
    let seconds1 = zone.secondsFromGMT

    // 获取指定时间所在时区与零时区的间隔秒数
    let seconds2 = zone.secondsFromGMTForDate(NSDate())

7、时区差值转换

  • 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、NSTimeZone 时区的创建
  3. 3. 2、NSTimeZone 时区的设置
  4. 4. 3、NSTimeZone 时区的获取
  5. 5. 4、获取时区的名称
  6. 6. 5、获取时区的缩写
  7. 7. 6、获取与零时区的间隔秒数
  8. 8. 7、时区差值转换
隐藏目录