>

다음 코드가 있습니다 :

NSDateFormatter * df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setFormatterBehavior:NSDateFormatterBehaviorDefault];
    [df dateFromString:@"2011-04-12 10:00:00"];

항상 null 날짜를 생성합니다. 왜 이런가요?

  • 답변 # 1

    배경 스레드에서이 작업을 수행하고 있습니까? UI 스레드에서 사용되지 않을 때 NSDateFormatter에 이상한 경험이있었습니다. 어쨌든, 내가 사용하는 방법은 다음과 같습니다.

    + (NSDate*)parseDate:(NSString*)inStrDate format:(NSString*)inFormat {
        NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
        [dtFormatter setLocale:[NSLocale systemLocale]];
        [dtFormatter setDateFormat:inFormat];
        NSDate* dateOutput = [dtFormatter dateFromString:inStrDate];
        [dtFormatter release];
        return dateOutput;
    }
    
    

  • 답변 # 2

    기기가 AM/PM 시간으로 설정되고 요청 된 문자열 형식이 @"yyyy-MM-dd HH:mm:ss" 로 설정된 경우  와이즈 비즈   dateFromString 를 반환합니다 .

    로케일을 nil 로 설정 한 경우  전환하면 정확한 날짜가 표시됩니다.

    @"en_US"
    
    

  • 답변 # 3

    같은 문제가있었습니다. 이 리소스를 사용하여 변환에 사용 된 문자열이 유효한지 다시 확인하여 시작했습니다.

    그런 다음 그것이 로케일일지도 모른다는 생각이 들기 때문에 다음을 시도했습니다.

    dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormat dateFromString:@"2013-02-14 09:30:00"];

    그것은 매력처럼 작동했습니다. 이것이 도움이 되길 바랍니다.

  • 답변 # 4

    방금이 코드를 실행했고 저에게 효과적이었습니다.

    [dateFomatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"]]
    
    

    결과는 다음과 같습니다 : 날짜 : 2011-04-12 17:00:00 +0000

  • 답변 # 5

    예, @Jan Gressmann과 합의했습니다. 비 UI 스레드에서도 NSDateFormatter를 사용하고 있으며 dateFromString 선택기가 때때로 null을 반환합니다. 예를 들어code:

    NSDateFormatter * df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setFormatterBehavior:NSDateFormatterBehaviorDefault];
    NSDate *theDate = [df dateFromString:@"2011-04-12 10:00:00"];
    NSLog(@"date: %@", theDate);
    
    

    콘솔에서

    출력:

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    [dateFormat setLocale:usLocale];
    [dateFormat setDateFormat:@"dd MMM yy HH:mm:ss"];
    NSDate *startDate = [dateFormat dateFromString:str_StartDate];
    NSDate *endDate = [dateFormat dateFromString:str_endDate];
    
    

    정말 이상해 ...

    (lldb) po str_StartDate (NSString *) $7 = 0x06da2180 03 SEP 2012 10:00:00 (lldb) po str_endDate (NSString *) $8 = 0x06d3a810 08 SEP 2013 10:00:00 (lldb) po startDate (NSDate *) $9 = 0x00000000 <nil> (lldb) po endDate (NSDate *) $10 = 0x06db05b0 2013-09-08 02:00:00 +0000

관련 자료

  • 이전 javascript - 마우스 오른쪽 버튼 클릭
  • 다음 ios - Any에서 프로토콜로 다운 캐스트