2013-09-10 3 views
0

Я хочу добавить 3 часа в мою текущую дату. Я использую следующий код для добавления часов, но он добавляет 6 часов к текущей дате.Добавить 3 часа в час NSDate

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); 

Результат: -

2013-09-10 12:25:24.752 project[1554:c07] Clean: 2013-09-10 06:55:15 +0000 
+3

Ваши расчеты выглядят корректно (кроме указания переменной «daysToAdd», если она содержит часы). - Но обратите внимание, что NSLog() печатает объекты NSDate всегда в часовом поясе GMT. –

+0

Дней добавить, но вы 'setHour'? Вы хотите добавить день или час? – Raptor

+0

Я хочу добавить 3 часа в мою текущую дату – Rushabh

ответ

5

Попробуйте

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 
+0

благодарит свою работу за меня :) – Rushabh

0
NSDate *newDate = [oldDate dateByAddingTimeInterval:hrs*60*60]; 
+3

Добавление времени как фиксированного количества секунд почти никогда не то, что вы хотите, даже при работе с часами. Подумайте о таких вещах, как летнее время. Подобные программы - это то, что заставляет людей тревожно уходить не в то время два раза в год! –

+1

@ DavidRönnqvist: На самом деле он делает * не * имеет значение с часами (насколько показывает мой тест). 'dateByAddingTimeInterval: 3 * 60 * 60' и' dateByAddingComponents: <компонент с 3 часами> 'производит точно такой же результат, даже если в этот промежуток времени есть переход на летнее время. –

+0

@ DavidRönnqvist DST только изменяет смещение от UTC, а не время. Настоящая причина не использовать эти точные временные смещения - это прыжки секунд. – borrrden

1
NSDate *CurrentTimedate = [NSDate date];  
NSLog(@"%@",CurrentTimedate); 
NSDate *newDate = [CurrentTimedate dateByAddingTimeInterval:60*60*3]; 
NSLog(@"%@",newDate); 
+2

Добавление времени как фиксированного количества секунд почти никогда не требуется, даже если вы занимаетесь часами. Подумайте о таких вещах, как летнее время. Подобные программы - это то, что заставляет людей тревожно уходить не в то время два раза в год! –

Смежные вопросы