2016-08-10 2 views
0

다음 날짜 양식이 서버 string으로 표시됩니다. NSDateformatter 잘못된 시간대

"Fri, 09 Sep 2016 16:50:40 GMT" 

나는이 내 로컬 timezone에에 변환 할 수 싶어하고, 나는 할 수있는이 방법이 있습니다
-(NSString *)convertDatetoLocalTimeZone:(NSString *)dateString { 

    NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init]; 
    [serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
    [serverFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; 

    NSDate *expDate = [serverFormatter dateFromString:dateString]; 

    NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init]; 
    [userFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; 
    [userFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

    return [userFormatter stringFromDate:expDate]; 

} 

이제 변환 된 날짜 :

"Fri, 09 Sep 2016 12:50:40 EDT" 

로를 이것은 문자열입니다. NSDate (OfCourse와 같은 시간대)으로 변환하고 싶습니다. 나는 변환 된 NSDateEDT 시간대를 보여줄 것으로 기대합니다.

-(NSDate *)getDateFromString:(NSString*)dateString{ 

    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; 
    [df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EDT"]]; //I also tried [NSTimeZone systemTimeZone] 
    return [df dateFromString:dateString]; 

} 

날짜가 반환됩니다 : 여기

내가 NSDate 다시 문자열로 변환해야 할 것입니다

2016-09-09 16:50:40 +0000 //this is in UTC 

또한 en_US

에 로케일을 설정하여 시도 내 시간대를로 설정하더라도 날짜 포맷터가 EDTUTC으로 변환하는 이유는 무엇입니까??

답변

0

변환 된 NSDate에 EDT 시간대가 표시 될 것으로 예상됩니다.

문제가 있습니다. NSDate에는 시간대가 없습니다. NSDate의 인스턴스는 특정 시간을 나타냅니다. 특정 순간에 특정 순간을 의미하는 것이 아니라 특정 순간을 의미합니다.

NSDate을 인쇄하면 날짜의 UTC 표현이 나타납니다. 그렇다고해서 날짜가 UTC가 아니라 인쇄 할 때 UTC 만 사용되었다는 의미입니다.

결과적으로 convertDatetoLocalTimeZone 방법은 이미 유효한 NSDate을 얻고 있습니다. 이미 해당 메소드의 결과를 계산 중이므로 별도의 getDateFromString 메소드가 필요하지 않습니다. 항상 문자열을 저장하고 NSDate으로 변환하는 대신 NSDate 값을 저장하고 필요할 때 문자열로 변환하는 것이 좋습니다. convertDatetoLocalTimeZone에 날짜를 저장하고 문자열을 저장하지 않은 다음 나중에 NSDate으로 다시 변환하십시오.