如何在目标c

时间:2015-05-21 00:25:15

标签: objective-c ios8 nsdate nsdateformatter

这可能是重复的但是我被卡住了,找不到这样一个具体的参考...

我可以通过这种方法获得当地时间:

NSLog(@"incoming date  : %@", etdString);
NSDateFormatter *incomingFormat = [[NSDateFormatter alloc] init];
[incomingFormat setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss"];
NSDate *incomingDate = [incomingFormat dateFromString: etdString];
NSLog(@"incoming formatted date  : %@", incomingDate);

这会生成正确显示当地时间的日期字符串。

现在,我需要小时组件。

我用过这个片段:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitHour fromDate:incomingDate];
NSInteger hour = [components hour];
NSString *hourString = [NSString stringWithFormat:@"%ld", hour];

但我的问题是hourString显示UTC时间。我也需要当地时间。

欢迎任何建议。

更新:这是我当前代码的日志输出:

[StopScheduleController tableView:cellForRowAtIndexPath:] incoming date : 2015-05-21T05:50:00 incoming formatted date : 2015-05-21 09:50:00 +0000 incoming formatted hourString : 5

请注意前两行的小时数。

1 个答案:

答案 0 :(得分:0)

再次使用日期格式化程序:

[incomingFormat setDateFormat:@"hh:mm"];
NSString * timeString = [incomingFormat stringFromDate:incomingDate];

NSDateFormatter使用当前的区域设置,其中包含当前时区by default

或者,或许更简单地说,使用类方法+localizedStringFromDate:dateStyle:timeStyle:

NSString * timeString = [NSDateFormatter localizedStringFromDate:incomingDate
                                                       dateStyle:NSDateFormatterNoStyle
                                                       timeStyle:NSDateFormatterShortStyle];