2016-02-18 2 views
1

Я пытаюсь преобразовать следующую строку «2016-05-15T14: 40: 43.447» в NSDate, но ее не NSDateFormatter всегда возвращает nil.Как получить NSTimeInterval из NSString?

Это то, что я делаю сейчас.

- (NSTimeInterval) timeIntervalFromDateString:(NSString *)stringDate { 
    if(!stringDate || ![stringDate length]) { 
     return 0.0f; 
    } 
    static NSDateFormatter *df = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     df = [NSDateFormatter new]; 
     [df setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss.SSS"]; 
    }); 
    NSDate *date = [df dateFromString:stringDate]; 
    // date is always returns nil. 
    return [date timeIntervalSince1970]; 
} 

Я попытался установить следующие форматы:

yyyy-MM-dd'T'hh:mm:ss.SSS 
yyyy-MM-dd'T'hh:mm:ssz 
yyyy-MM-dd'T'hh:mm:ss Z 
yyyy-MM-dd'T'hh:mm:ss.SSS Z 
yyyy-MM-dd'T'hh:mm:ss.SSS z 

Но ни один из них не работал.

Я также проверил What format string do I use for milliseconds in date strings on iPhone?, но не поможет.

Любые удачи?

+0

Почему вы хотите dispatch_once блок там? Нужно – Arun

+0

Да, я использовал, чтобы убедиться, что 'NSDateFormatter' будет создаваться только один раз. – Hemang

+0

В любом случае, если вы создаете экземпляр dateformatter в методе, его объем будет только в методе. Поэтому, даже если вы создаете каждый раз, он будет очищен из памяти при выходе из метода. Я думаю, так как вы дали dispatch_once, экземпляр dateformatter не получает выделение и ничтожно каждый раз – Arun

ответ

3

14:40:43 является 24-часовой формат, это столица H

yyyy-MM-dd'T'HH:mm:ss.SSS 
0

Попробуйте этот код

- (NSTimeInterval) timeIntervalFromDateString:(NSString *)stringDate { 
     if(!stringDate || ![stringDate length]) { 
      return 0.0f; 
     } 
     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     df.timeZone = [NSTimeZone localTimeZone]; 
     df.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS"; 
     NSDate *date = [df dateFromString:stringDate]; 

     return [date timeIntervalSince1970]; 
    } 
+0

И вам также нужно изменить формат даты. Я обновил свой ответ – Arun