如何将小时字符串格式化为 objective c 中的当地时间

How do I format an hour string to local time in objective c

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

我可以用这个方法获取当地时间:

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

请注意前两行的时间。

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

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

NSDateFormatter 使用当前语言环境,其中包括当前时区,by default

或者,也许更简单,使用 class 方法 +localizedStringFromDate:dateStyle:timeStyle::

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