2009-11-04 70 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); 

输出日期的第一个和之后的时间如何解决这个问题?在短文体中解析时间和日期时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

设置timeStyledateStyle意味着格式化忽略dateFormat您设定。如果你总是您的日期被格式化为00:00 on 2009/11/04不论用户的语言环境,你应该设置这样的语言环境:

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]; 

请注意,您应该在区域始终设置为en_US_POSIX如果你处理机器读取日期(例如ISO 8601),因为某些语言环境会将'HH'变为'hh',这可能会产生意想不到的结果。