2014-01-30 5 views
1

아래 코드를 사용하고 있지만 하루 앞당겨집니다.NSDateFormatter가 하루 전날 제공합니다

예 : 날짜 및 내고 "2013년 9월 1일 3시 59분 59초 +0000"로오고있다 "는 59-0400 : 59 2013-08-31T23이"로 통과 입력 문자열 .

NSDateFormatter *formatter = [self railsDateFormatter]; 
NSDate *date = [formatter dateFromString:dateString]; 

+(NSDateFormatter*)railsDateFormatter 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZ"]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
    [formatter setLocale:locale]; 
    return formatter; 
} 

감사합니다.

+0

너는 1 일 앞서는 것 같지 않고, 앞으로 4 시간 더있는 것 같아. 출력 할 때 날짜 형식은 어떻게됩니까? –

+0

단서는 문자열 끝에있는 시간대 오프셋이었으며, 처음에는'-0400' (4 시간 지연)이고 두 번째 시간에는'+ 0000' (0 시간 지연)이 있습니다. 로컬을'en_US_POSIX'로 설정하면 시간대가 변경되었습니다. 전혀 문제가 없습니다. –

+0

YYYY와 yyyy의 차이를 모르는 경우 yyyy를 사용해야합니다. 그러나 그것은 단지 1 월 1 일 근처의 날짜를 깨뜨릴 것입니다. –

답변

3

아마도 TimeZone 문제와 관련이 있습니다. UTC 또는 현지 시간으로 측정 한 날짜입니까? 이에 따라 dateFormatter의 시간대

+0

올바르지 않습니다. 입력 문자열에 "Z"형식에 해당하는 명시적인 시간대 * "-0400"이 포함되어 있으므로 'setTimeZone :'은 날짜 변환에 영향을주지 않습니다. –

+0

아아 - 좋아, 구문 분석은 시간대를 지나치지 않고 올바른 것입니다.하지만 그는 원래 시간대에서 다시 날짜를 출력하는 것 같습니다. 따라서 출력 틴의 시간대를 설정해야합니다. – rist

5

를 설정 안녕하세요이 때문에

-(NSDate *)convertDateFromString:(NSString *)strDate DateFormat:(NSString *)strDateFromat 
{ 
    [email protected]"yyyy-MM-dd'T'HH:mm:ss"; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    //chirag::In date day is displayed one less so it can print exact date 
    formatter.timeZone = [NSTimeZone timeZoneWithAbbreviation: @"GMT"]; 
    [formatter setDateFormat:strDateFromat]; 

    NSDate *currentYearDate = [formatter dateFromString:strDate]; 

    return currentYearDate; 
} 
3

그 시간대의 문제에 적절한 시간대를 설정하시기 바랍니다 시간대 차이로 발생한다. DateFormatter 오브젝트의 TimeZone를 설정합니다.

[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"GMT"]]; 
+0

올바르지 않습니다. 입력 문자열에 "Z"형식에 해당하는 명시적인 시간대 * "-0400"이 포함되어 있으므로 'setTimeZone :'은 날짜 변환에 영향을주지 않습니다. –

관련 문제