2013-07-23 1 views
0

Я получаю NSString (в которой у меня есть дата) из базы данных, мне нужно добавить дни, например, 10 // 12/15/45/60 дней дата, как я могу это сделать.Преобразование NSString в NSDate для добавления дней к динамической дате

, когда я пытаюсь с этим кусок кода:

NSString *expiryDateStr = [NSString stringWithFormat:@"%@",[[assets valueForKeyPath:@"assetrewards.expirydate"] objectAtIndex:0]]; 
     NSLog(@" date %@",expiryDateStr); 

     //DATE FORMATTER 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"dd/MM/yyyy"]; 
     NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 
     [dateFormat setDateFormat:[NSString stringWithFormat:@"dd MMM yyyy HH:mm"]]; 
     [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:3600*5]]; 
     NSLog(@"date format %@",dateFormat); 
     NSLog(@"Date: %@", _date); 

Я получаю выход, как это:

date 07/10/2013 
date format <NSDateFormatter: 0x9f9d4a0> 
Date: 2013-10-06 18:30:00 +0000 

дата получения изменилась, я не зная, где я буду неправильно , если это правильная дата, как добавить дни к дате.

+0

проверить эту ссылку на дату создания http://iosdevelopertips.com/cocoa/date-formatters-examples-take-3.html –

+1

Совершенно правильные результаты для Индии. (Смещение временной области x: 30 является мертвой поддачей.) –

+0

Обратите внимание, что второй setDateFormat/setTimezone не действует, поскольку после этого dateFormatter не используется. –

ответ

2
NSString *expiryDateStr = @"07/10/2013"; 
NSLog(@" date %@",expiryDateStr); 
expiryDateStr=[expiryDateStr stringByAppendingString:@" 00:00:00 +000"]; 
//DATE FORMATTER 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd/MM/yyyy HH:mm:ss Z"]; 
NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 
[dateFormat setDateFormat:[NSString stringWithFormat:@"dd MMM yyyy HH:mm"]]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit |NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit fromDate:_date]; 
NSInteger day = [components day]+1; // U can add as per your requirement 


[components setDay:day]; 
NSDate *NextDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 

NSLog(@"Next Date: %@", NextDate); 
+0

Спасибо, Кук, мне очень помогло – iOSDev

+0

Нет необходимости добавлять время к строке даты. Значение по умолчанию 00:00:00. И, как я сказал выше, второй setDateFormat и setTimeZone ничего не делают (и этот часовой пояс не должен использоваться, если он не использовался для преобразования исходной даты). –

+0

Приветственный приятель ... –

0

вы можете и дней в дате, как показано ниже ...

множество часовых поясов, как показано ниже ...

[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 


    NSDate *dateAftertwenty = [NSDate dateWithTimeInterval:10*24*60*60 sinceDate:date]; //TimeInterval is of 10 days....you can set any number of days.24 is hours, 60 is minutes and 60 is seconds at last.. 

Позвольте мне знать, что она работает или нет !!!

Happy Coding !!!!

+0

1st Мне нужно преобразовать строковое значение, которое датирует NSDate, что я не могу сделать. – iOSDev

+0

только использовать формат [dateFormat setDateFormat: @ "MMM/dd/yyyy"]; , просто проверьте, даёт ли вам правильную дату или нет ... ?? – NiravPatel

+0

Я получаю нулевое значение – iOSDev

0

UPDATE:

Первый setTimeZone к localTimeZone как сильфон ..

[formatter setLocale:[NSLocale currentLocale]]; 
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

Преобразовать эту строку дату NSDate с моим сильфоном методом ..

-(NSDate *)convertStringToDate:(NSString *) date dateFormat:(NSString*)dateFormat{ 
    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [formatter setLocale:[NSLocale currentLocale]]; 
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    NSDate *nowDate = [formatter setDateFormat:dateFormat];// set format here which format in string date 
    date = [date stringByReplacingOccurrencesOfString:@"+0000" withString:@""]; 
    nowDate = [formatter dateFromString:date]; 
    // NSLog(@"date============================>>>>>>>>>>>>>>> : %@", nowDate); 
    return nowDate; 
} 

и использовать его как сильфон ..

NSDate *startDate = [self convertStringToDate:@"07/10/2013" dateFormate:@"dd/MM/yyyy"]; 

выше набора даты формиат, какой формат определяют в строке

+0

@iOSDev вы пытаетесь это сделать ?? в чем проблема?? –

+0

1stly Я хочу преобразовать NSString в NSDate. У меня проблемы есть один раз, это ясно, я смогу переместить следующий шаг. – iOSDev

+0

@iOSDev i обновленный ответ чувак попробуйте и дайте мне знать .. :) –

0
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd/MM/yyyy"]; 
NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 

не прекрасно - никаких проблем. «Проблема» в том, что

NSLog(@"Date: %@", _date); 

отобразит дату в формате UTC/GMT, и, следовательно, (в Индии) значение пяти с половиной часов раньше, чем «реальная» дата. Это не проблема - когда вы отформатируете дату в другом строковом формате (со вторым воплощением форматирования даты), тогда это будет правильно (пока вы НЕ установите часовой пояс для этой версии, если вы не сделали 'установите его для первого).

Чтобы увеличить дату, обычно лучше всего использовать NSDateComponents (более или менее, как показано в параграфе), а просто добавляя приращения в 24 часа, если в диапазоне дат есть какой-либо переход на летнее время.

0

Я изменил код, и я считаю, что это то, что вы хотите:

NSString *expiryDateStr = @"07/10/2013"; 
NSLog(@" date %@",expiryDateStr); 

//DATE FORMATTER 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd/MM/yyyy"]; 

[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 
NSLog(@"date format %@",dateFormat); 
NSLog(@"Date: %@", _date); 

Выход:
Дата 07/10/2013
формат даты
Дата: 2013-10-07 00:00:00 +0000

Теперь изменил часовой пояс в коде:

NSString *expiryDateStr = @"07/10/2013"; 
NSLog(@" date %@",expiryDateStr); 

//DATE FORMATTER 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd/MM/yyyy"]; 

[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+5:30"]]; 
NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 
NSLog(@"date format %@",dateFormat); 
NSLog(@"Date: %@", _date); 

И выход является:

Дата 07/10/2013
формат даты
Дата: 2013-10-06 18:30:00 +0000

Это выход вы получение. Это связано с тем, что используется ваш часовой пояс с вашего компьютера.

EDIT (количество дней для добавления обозначается days целого):

NSString *expiryDateStr = @"07/10/2013"; 
NSLog(@" date %@",expiryDateStr); 

//DATE FORMATTER 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd/MM/yyyy"]; 


[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
NSDate *_date = [dateFormat dateFromString:expiryDateStr]; 
NSInteger days = 30; 
_date = [_date dateByAddingTimeInterval:(60*60*24*days)]; 

NSLog(@"date format %@",dateFormat); 
NSLog(@"Date: %@", _date); 

Выход редактируемого кода:

Дата 07/10/2013
формат даты
Дата: 2013-11-06 00:00:00 +0000

+0

да, именно это я хочу – iOSDev

+0

может у вас, пожалуйста, добавьте код для добавления количества дней до даты, который завершит ответ. – iOSDev

+0

@iOSDev - проверьте сейчас ... дата добавлена ​​с 30 днями ... – iphondroid

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

  • Нет связанных вопросов^_^