【发布时间】:2015-05-12 20:59:15
【问题描述】:
我使用NSDateIntervalFormatter 来格式化时间范围。他们总是在同一天,所以我不想显示日期。在美国英语语言环境中,它们看起来像 9:00 PM - 10:00 PM。
当时间超过午夜时,问题就出现了。然后,从技术上讲,结束日期是第二天,NSDateIntervalFormatter 打印日期,即使它的dateStyle 设置为NSDateFormatterNoStyle:
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.year = 2015;
comps.month = 5;
comps.day = 12;
comps.hour = 21;
NSDate *startDate = [[NSCalendar currentCalendar] dateFromComponents:comps];
// next day, at midnight
comps.day = comps.day + 1;
comps.hour = 0;
NSDate *endDate = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSDateIntervalFormatter *formatter = [[NSDateIntervalFormatter alloc] init];
formatter.timeZone = [NSTimeZone localTimeZone];
formatter.dateStyle = NSDateFormatterNoStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
NSString *string = [formatter stringFromDate:startDate toDate:endDate];
NSLog(@"%@", string);
// expected: 9:00 PM - 12:00 AM
// actual: 5/12/2015, 9:00 PM - 5/13/2015, 12:00 AM
有没有办法让它始终隐藏日期,而不必分别格式化两个日期并用破折号连接它们?
【问题讨论】:
-
经过进一步调查(感谢 Brian!),这似乎是 Apple 的错误。我filed a radar。将退回到将两个
NSDateFormatters 的结果与本地化格式字符串连接起来。
标签: ios objective-c ios8 foundation