代码之家  ›  专栏  ›  技术社区  ›  just_another_coder

如何从特定时区获取NSDate并基于该日期执行计算

  •  0
  • just_another_coder  · 技术社区  · 15 年前

    我一直在想办法 NSDate , NSCalendar , NSDateComponents , NSTimeZone ,和 NSDateFormatter .

    N日期 , 时区 NSDateFormatter 很直截了当。其他的班级没有。

    我想得到当前的东部时间(代码运行时实际的日期/时间在EST中)。

    然后我想提前一个月,考虑到可能(或可能不)有效的日光节约。

    据我所知,增加84600是不正确的做法,但我可能错了。

    有人可以张贴一个如何做到这一点的例子吗?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Ole Begemann    15 年前

    其实很简单:

    NSDate *now = [NSDate date];
    
    NSDateComponents *oneMonth = [[[NSDateComponents alloc] init] autorelease];
    [oneMonth setMonth:1];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonth toDate:now options:0];
    
    NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
    [df setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
    [df setDateStyle:NSDateFormatterMediumStyle];
    [df setTimeStyle:NSDateFormatterMediumStyle];
    
    NSLog(@"Now in New York: %@", [df stringFromDate:now]);
    NSLog(@"One month from now in New York: %@", [df stringFromDate:oneMonthFromNow]);
    

    编辑:也就是说,你的问题措辞有点混乱。使用NSDate,您不会在特定时区进行计算。你也得不到“现在的东部时间”。你只要得到 当前时间点 (不考虑时区)并对其进行计算。到特定时区的实际转换仅在输出时发生(当您向用户显示时间时,通常在用户的时区中)。