2012-05-30 8 views
0

У меня двойное значение, которое представляет собой NSTimeInterval. Я хочу создать правильную дату из двойного значения, вот мой код. Я получаю вывод, но есть некоторые изменения от фактического значения.Проблема преобразования NSDate в iOs

NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value 

NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)]; 
NSTimeInterval interval = [time doubleValue];  
NSDate *online = [NSDate date]; 
online = [NSDate dateWithTimeIntervalSince1970:interval];  
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 

NSLog(@"result: %@", [dateFormatter stringFromDate:online]); 

Что поделал не так? Есть идеи?

EDIT: Для тестирования первого я преобразовал дату NSTimeInterval и попытался вернуть дату. Вот код и вывод.

NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"]; 

NSDateFormatter *format = [[NSDateFormatter alloc]init]; 
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 
NSDate *dateFromString1 = [[NSDate alloc] init]; 
dateFromString1 = [format dateFromString:modDate]; 
[format release]; 
NSTimeInterval timeInterval1 = [dateFromString1 timeIntervalSince1970]; 

NSLog(@"timeinterval : %f",timeInterval1); 

NSDate *online = [NSDate date]; 
online = [NSDate dateWithTimeIntervalSince1970:timeInterval1];  
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 

NSLog(@"result: %@", [dateFormatter stringFromDate:online]); 

и выход:

result: 05/30/2012 12:02:55 PM actual date:5/30/2012 2:02:55 PM 
+0

Каковы изменения? Где выход NSLog? –

+0

Я обновил свой вопрос с кодом и результатами – Mithun

ответ

4

Во-первых, NSTimeInterval с плавающей точкой, так что вам не нужно использовать NSString или NSNumber (NSNumber сделаны для хранения чисел в словарях или массивов).

Вы можете упростить код, как:

NSTimeInterval interval = 1338229800; 
interval -= 3600; 
NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval]; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 
NSLog(@"result: %@", [dateFormatter stringFromDate:online]); 

Это дало мне: 05/28/2012 19:30:00 PM

Это соответствует начальному значению: 1338229800 минус один час (- 3600 сек).

EDIT:

В вашем редактировании, Вы пишете:

NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"]; 
NSDateFormatter *format = [[NSDateFormatter alloc]init]; 
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 

Но вы должны проверить the date format paterns page:
2:02:55 PM соответствует @"h:mm:ss a" и не "HH:mm:ss aaa"

+0

можно ли отображать 12-часовой формат? – Mithun

+0

спасибо u so much :) – Mithun

+0

да это. Как я уже сказал, все объяснено на http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns – Martin

1

Есть много вещи Неправильный код:

Зачем создавать все эти объекты:

NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value 
NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)]; 
NSTimeInterval interval = [time doubleValue]; 

Когда это то же самое:

NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; 
NSTimeInterval interval = [modiDate doubleValue] - 3600; 

Здесь вы Ассинг новую дату онлайн:

NSDate *online = [NSDate date]; 

только к установите другую дату в Интернете здесь:

online = [NSDate dateWithTimeIntervalSince1970:interval]; 

Вы должны были сделать это:

NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval]; 

Я уверен, что вы проблемы с этим кодом, но он работает правильно. Вы можете установить локаль, на самом деле не нужно, но может иметь некоторый эффект в локализации:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.locale = [NSLocale systemLocale]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"]; 

NSLog(@"result: %@", [dateFormatter stringFromDate:online]); 

Добавлен новый код от редактирования

В вашем редактирования вы добавили этот код:

NSDate *dateFromString1 = [[NSDate alloc] init]; 
dateFromString1 = [format dateFromString:modDate]; 

Здесь протекают в NSDate объект, просто сделать это:

NSDate *dateFromString1 = [format dateFromString:modDate]; 

И как состояние в ответе martin проблема в строке формата времени.

0

Вы используете HH, который находится в течение 24 часов. Вместо этого используйте hh (0-12), который подходит для формата AM/PM.

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