iPhone SDK Objective-C __DATE__ (дата компиляции) не может быть преобразовано в NSDate - PullRequest
5 голосов
/ 19 мая 2010
//NSString *compileDate = [NSString stringWithFormat:@"%s", __DATE__];
NSString *compileDate = [NSString stringWithUTF8String:__DATE__];

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];

[df setDateFormat:@"MMM d yyyy"];   
//[df setDateFormat:@"MMM dd yyyy"];    

NSDate *aDate = [df dateFromString:compileDate];  

Хорошо, я сдаюсь. Почему aDate иногда возвращается как ноль?

Должно ли это иметь значение, если я использую закомментированные строки ... или соответствующие им строки замены?

Ответы [ 2 ]

20 голосов
/ 19 мая 2010

Может возвращать ноль, если для параметра «Регион» телефона установлено значение «Не США» (или эквивалентное значение).

Попробуйте установить для языка форматирования значение en_US:

NSString *compileDate = [NSString stringWithUTF8String:__DATE__];
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setDateFormat:@"MMM d yyyy"];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[df setLocale:usLocale];
[usLocale release];
NSDate *aDate = [df dateFromString:compileDate];  
9 голосов
/ 10 января 2014

Немного модифицированный ответ DyingCactus для кода с поддержкой ARC (для упрощения копирования-вставки):

NSString *compileDate = [NSString stringWithUTF8String:__DATE__];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMM d yyyy"];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[df setLocale:usLocale];
NSDate *aDate = [df dateFromString:compileDate];
...