2015-06-09 1 views
1

В настоящее время я работаю с существующим массивом NSDates в следующем формате:Как превратить NSString hexInterval в NSTimeInterval для даты преобразования

NSDate *today = [NSDate date]; //today is used as an example 
NSTimeInterval interval = [today timeIntervalSince1970]; 
NSString *hexInterval = [NSString stringWithFormat:@"%08x", (int)interval]; 
NSLog(@"hexInterval %@", hexInterval); 

Даты выводятся в формате, например, 4ec2acf0.

Моя цель - вернуть их обратно в NSDates, поскольку, поскольку они пришли из NSTimeInterval, мне было интересно, как я могу вернуть его обратно в NSTimeIntervals, учитывая, что все, что у меня есть, это эти 8-символьные NSStrings.

Моя цель:

//Turn NSString into NSTimeInterval here, then: 
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; 

Спасибо!

+0

Ваш код будет перерыв в 2038 – gnasher729

+1

А почему вы это делаете? NSDate - прекрасное время. Если вам нужно, вы конвертируете его в NSNumber. Почему бы вам сделать вашу жизнь труднее, превратив ее в шестнадцатеричную строку? – gnasher729

+0

Это на самом деле очень хороший момент. К сожалению, код, переданный мне, имел только NSStrings. Я посмотрю, смогу ли я реорганизовать более ранние коды, поэтому данные не будут потеряны. – daspianist

ответ

1

Вы можете разобрать шестигранные с NSScanner, как это:

unsigned res = 0; 
NSScanner *scanner = [NSScanner scannerWithString:hexInterval]; 
[scanner scanHexInt:&res]; 
NSTimeInterval interval = (NSTimeInterval)res; 
// Once you have an interval, use your code: 
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; 

Обратите внимание, что этот подход обрежет время часть NSTimeInterval. Это происходит в тот момент, когда вы конвертировать NSTimeInterval в int на этой линии:

NSString *hexInterval = [NSString stringWithFormat:@"%08x", (int)interval]; 
+0

Спасибо за указание - да, усечение в порядке, хотя немного деталей потеряно. – daspianist

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

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