2009-11-04 2 views
0
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:@"2009-11-03T21:02:34-08:00"]; 
[inputFormatter release]; 
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 
[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 
[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 


NSString *newDateString = [outputFormatter stringFromDate:formatterDate]; 
NSLog(@"newDateString %@", newDateString); 

이 문제를 어떻게 해결할 것인가?shortstyle에서 시간과 날짜를 파싱 할 때 NSDateFormatter에서 버그가 발생했습니다.

난 당신이 시간과 날짜 스타일을 설정하면 짧은 스타일과 날짜

답변

1

보다 시간을 표시하려면, 당신은 당신이 수동으로 설정 날짜 형식을 재정의합니다.

이 시도 :

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:@"2009-11-03T21:02:34-08:00"]; 
[inputFormatter release]; 
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 

//[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 
//[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
//[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 
//NSString *newDateString = [outputFormatter stringFromDate:formatterDate]; 

// format for time only 
[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[outputFormatter setDateStyle:NSDateFormatterNoStyle]; 

// get time 
NSString *newTimeString = [outputFormatter stringFromDate:formatterDate]; 

// format for date only 
[outputFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 

// get date and format with time 
NSString *newDateString = [NSString stringWithFormat:@"%@ on %@", newTimeString, [outputFormatter stringFromDate:formatterDate]]; 

NSLog(@"newDateString %@", newDateString); 
0

timeStyle 또는 dateStyle이 포맷터가 dateFormat가 설정 한 무시 것을 의미한다 설정. 당신이 있다면 당신은 항상 en_US_POSIX에 로케일을 설정해야합니다

NSDateFormatter*outputFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
NSLocale* locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
[outputFormatter setLocale:locale]; 
[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 

NSString* newDateString = [outputFormatter stringFromDate:formatterDate]; 

참고 : 항상 날짜에 관계없이 사용자의 로케일의 00:00 on 2009/11/04로 포맷하려면이 같은 로케일을 설정해야 일부 로케일은 'HH'를 'hh'로 바꾸어 예기치 않은 결과를 가져올 수 있기 때문에 기계 읽기 날짜 (예 : ISO 8601)를 처리합니다.

관련 문제