我一直在尝试围绕NSDate
,NSCalendar
,NSDateComponents
,NSTimeZone
和NSDateFormatter
。
NSDate
,NSTimeZone
和NSDateFormatter
非常简单明了。其他类不是。
我想获取当前的东部时间(实际的日期/时间是在代码运行时的EST中)。
然后我想将该日期提前一个月,考虑到可能(或可能不是)有效的夏令时。
根据我的理解,添加84600是不正确的方法,但我可能是错的。
有人可以发一个如何做到这一点的例子吗?
答案 0 :(得分:2)
实际上非常简单:
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,您不会在特定时区进行计算。你也没有得到“当前的东部时间”。您只需获取当前时间点(无论时区如何)并对其进行计算。实际转换到特定时区只发生在输出中(当您向用户显示时间时,通常是在他们的时区)。