2013-04-30 78 views
3

我得到日期值日期:2013-06-07 18:30:00 +0000。我想从中减去30分钟,但它没有给出适当的时间。如何从日期中减去30分钟

我已经试过这

NSTimeInterval secondsPerHour = 60*30; 
NSDate *newDate = [date dateByAddingTimeInterval:-secondsPerHour]; 

回答

1

你可以尝试NSDateComponents,这样的事情:

NSDate* yourDate = [NSDate dateWithTimeIntervalSinceNow:0]; // your date, to substract 30 mins 

NSDateComponents *dc = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:yourDate]; 
[dc setMinute:[dc minute] - 30]; 

NSDate* date = [[NSCalendar currentCalendar] dateFromComponents:dc]; // 30 mins before now 

或者说:

NSDate* yourDate = [NSDate dateWithTimeIntervalSinceNow:0]; // your date, to substract 30 mins 

NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setMinute:-30]; 

NSDate* date = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:yourDate options:0]; // 30 mins before now 
3

你可以使用:

NSDate *minusOneHr = [[NSDate date] dateByAddingTimeInterval:-30*60]; 
+0

这正是OP试用的 – 2013-04-30 04:57:59

+0

我认为这与问题中给出的代码相同。只是切换价值的地方 – 2013-04-30 04:58:24

+0

@KiritModi google.co.in – 2014-08-08 10:56:28

7

原因unsigned intnegativepositive number。这应该工作:

NSDate *newDate = [date dateByAddingTimeInterval:-(NSTimeInterval)((u_int32_t)30*60)]; 

编辑:其它用途NSDateComponents

NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
[dateComponents setMinute:-30]; 
NSDate *halfHourAgo = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:yourDateHere options:0]; 
NSLog(@"\ncurrentDate: %@ \n halfHourAgo: %@", yourDateHere, halfHourAgo); 
+0

接受(打勾)答案如果有帮助? – 2013-05-03 07:59:57

1

将此代码复制粘贴到viewDidLoad并检查结果。

NSDate *today = [[NSDate alloc] init]; 
    NSLog(@"Today %@", today); 
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; 
    [offsetComponents setMinute:-30]; // If you want to change Month,Year,Day,Hour etc. Just change the "setMinute" to setMonth,setYear,setDay,setHour 
    NSDate *dateComp = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0]; 
    NSLog(@"Desired Day %@", dateComp);