Ios 将NSDate的小时数增加3小时

Ios 将NSDate的小时数增加3小时,ios,objective-c,nsdate,nscalendar,nsdatecomponents,Ios,Objective C,Nsdate,Nscalendar,Nsdatecomponents,我想在当前日期的基础上再增加3小时。我使用下面的代码来添加小时数,但它在当前日期上添加了6小时 NSDate *n = [NSDate date]; int daysToAdd = 3; // or 60 :-) // set up date components NSDateComponents *components1 = [[[NSDateComponents alloc] init] autorelease]; [components1 setHour:daysToAdd]; //

我想在当前日期的基础上再增加3小时。我使用下面的代码来添加小时数,但它在当前日期上添加了6小时

NSDate *n = [NSDate date];
int daysToAdd = 3;  // or 60 :-)

// set up date components
NSDateComponents *components1 = [[[NSDateComponents alloc] init] autorelease];
[components1 setHour:daysToAdd];

// create a calendar   
NSCalendar *gregorian12 = [NSCalendar currentCalendar];

NSDate *newDate2 = [gregorian12 dateByAddingComponents:components toDate:n options:0];
NSLog(@"Clean: %@", newDate2);
结果是:

试试这个

NSString *strCurrentDate;
NSString *strNewDate;
NSDate *date = [NSDate date];
NSDateFormatter *df =[[NSDateFormatter alloc]init];
[df setDateStyle:NSDateFormatterMediumStyle];
[df setTimeStyle:NSDateFormatterMediumStyle];
strCurrentDate = [df stringFromDate:date];
NSLog(@"Current Date and Time: %@",strCurrentDate);
int hoursToAdd = 3;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setHour:hoursToAdd];
NSDate *newDate= [calendar dateByAddingComponents:components toDate:date options:0];
[df setDateStyle:NSDateFormatterMediumStyle];
[df setTimeStyle:NSDateFormatterMediumStyle];
strNewDate = [df stringFromDate:newDate];
NSLog(@"New Date and Time: %@",strNewDate);
输出

Current Date and Time: Sep 10, 2013, 1:15:41 PM
    New Date and Time: Sep 10, 2013, 4:15:41 PM

除了命名变量daysToAdd(如果包含小时)之外,您的计算看起来是正确的。-但请注意,NSLog总是在GMT时区打印NSDate对象。要添加的天数,但您设置了小时?您想添加天或小时?我想在我的当前日期中添加3小时。如果您认为计算错误,则应显示输入的当前日期、输出的计算日期和预期输出。将时间添加为固定的秒数几乎从来都不是您想要的,即使在处理小时时也是如此。想想夏时制之类的东西。这种程序正是导致人们每年两次在错误的时间发出警报的原因!将时间添加为固定的秒数几乎从来都不是您想要的,即使是在处理小时数时也是如此。想想夏时制之类的东西。这种程序正是导致人们每年两次在错误的时间发出警报的原因@戴维德·隆克维斯特:事实上,就我的测试结果而言,这对工作时间没有影响。dateByAddingTimeInterval:3*60*60和dateByAddingComponents:产生完全相同的结果,即使在该时间跨度内有DST转换。@DavidRönnqvist DST只更改UTC的偏移量,而不更改时间本身。不使用这些精确时间偏移的真正原因是闰秒。@Borrden:即使使用闰秒,我也无法注意到这两种计算方法之间的任何差异。你有什么参考资料或例子吗据我所知,Unix时间不计算闰秒。@MartinR似乎你是对的,因为[Unix时间]处理闰秒,它既不是时间的线性表示,也不是UTC的真实表示。那太令人失望了。
NSDate *CurrentTimedate = [NSDate date];    
NSLog(@"%@",CurrentTimedate);   
NSDate *newDate = [CurrentTimedate dateByAddingTimeInterval:60*60*3];
NSLog(@"%@",newDate);
NSString *strCurrentDate;
NSString *strNewDate;
NSDate *date = [NSDate date];
NSDateFormatter *df =[[NSDateFormatter alloc]init];
[df setDateStyle:NSDateFormatterMediumStyle];
[df setTimeStyle:NSDateFormatterMediumStyle];
strCurrentDate = [df stringFromDate:date];
NSLog(@"Current Date and Time: %@",strCurrentDate);
int hoursToAdd = 3;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setHour:hoursToAdd];
NSDate *newDate= [calendar dateByAddingComponents:components toDate:date options:0];
[df setDateStyle:NSDateFormatterMediumStyle];
[df setTimeStyle:NSDateFormatterMediumStyle];
strNewDate = [df stringFromDate:newDate];
NSLog(@"New Date and Time: %@",strNewDate);
Current Date and Time: Sep 10, 2013, 1:15:41 PM
    New Date and Time: Sep 10, 2013, 4:15:41 PM