2015-09-04 3 views
0

Предположим, что моя дата рождения (пн/день/год) 10-05-1932 (как NSDate), как ее конвертировать в NSTimeInterval.Как получить и преобразовать обратно дату рождения пользователя в/из NSTimeInterval?

Опять же, как конвертировать назад NSTimeInterval в NSDate назад?

Я пробовал использовать различные методы NSDate, но пока не удалось.

Что я делаю?

NSString *strdate = @"10-05-1932"; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MM-dd-yyyy"]; 
NSDate *date = [df dateFromString:strdate]; 
NSLog(@"%.f", -[date timeIntervalSinceNow]); 

Это регистрирует 2616605071 (по состоянию на 4 сентября 2015 г. в 16:21) - Когда я проверил его с сайта, как this это дает мне неправильную дату.

ответ

0

Это только что сработало!

NSString *strdate = @"10-05-1932"; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MM-dd-yyyy"]; 
NSDate *date = [df dateFromString:strdate]; 
NSLog(@"%@",date); 
NSTimeInterval interval = [date timeIntervalSince1970]; 
NSLog(@"%f", interval); 
NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:interval]; 
NSLog(@"%@",date2); 

Благодаря @sikhapol

2
NSTimeInterval timeInterval = date.timeIntervalSinceReferenceDate; 
NSDate *anotherDate = [NSDate dateWithTimeIntervalSinceReferenceDate: timeInterval]; 

Пробуди код, приведенный ниже. date и anotherDate будут идентичными.

NSCalendar *calendar = [NSCalendar currentCalendar]; 
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay:10]; 
[components setMonth:5]; 
[components setYear:1934]; 
NSDate *date = [calendar dateFromComponents:components]; 
NSLog(@"%@", date); 
NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate]; 
NSDate *anotherDate = [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval]; 
NSLog(@"%@", anotherDate); 

UPDATE:

Это неправильно, потому что вы получаете временную метку (интервал времени) с этого сайта, которые используют UNIX метку времени. Кроме того, это неверно, потому что вы используете timeIntervalSinceNow, который, вероятно, будет меняться каждый раз, когда вы вызываете метод, потому что он относится к текущему времени. Если вы хотите, чтобы дата/интервал времени был совместим с этим сайтом. Использование:

NSTimeInterval timeInterval = date.timeIntervalSince1970; 
NSDate *anotherDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

Вы можете скопировать timeInterval из приведенного выше (-1188000000) код и вставьте его на веб-сайте, и это даст вам правильную дату.

Внутренний, NSDate период времени хранения относительно контрольной даты (1 января 2001 года). Веб-сайт, который вы упомянули, - это отметка времени UNIX, которая относится к 1 января 1970 года.

+0

Это также дает мне неправильные результаты. Проверьте измененный вопрос. Я думаю, 'timeIntervalSinceReferenceDate' не помогло бы для более ранних дат. – Hemang

+0

«timeInterval» будет отрицательным, если он находится до контрольной даты (1 января 2001 г.). По крайней мере, это то, что происходит на моей машине. – sikhapol

+0

Большое спасибо, один вопрос, второй способ правильный или нет? 'NSTimeInterval timeInterval = date.timeIntervalSince1970;'? – Hemang