Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSDateIntervalFormatter打印日期,即使dateStyle设置为NSDateFormatterNoStyle_Ios_Objective C_Ios8_Foundation - Fatal编程技术网

Ios NSDateIntervalFormatter打印日期,即使dateStyle设置为NSDateFormatterNoStyle

Ios NSDateIntervalFormatter打印日期,即使dateStyle设置为NSDateFormatterNoStyle,ios,objective-c,ios8,foundation,Ios,Objective C,Ios8,Foundation,我正在使用NSDateIntervalFormatter设置小时数范围的格式。他们总是在同一天,所以我不想显示日期。在美式英语环境中,它们看起来像是9:00 PM-10:00 PM 时间过了午夜,问题就出现了。然后,从技术上讲,结束日期是第二天,并且NSDateIntervalFormatter打印日期,即使其dateStyle设置为NSDateFormatterNoStyle: NSDateComponents *comps = [[NSDateComponents alloc] init];

我正在使用
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

有没有办法让它总是隐藏日期,而不必单独格式化两个日期并用破折号将它们连接起来?

如果您从日期组件中消除Y/M/D,它会按需要工作:

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 = 24;
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];
// string = 9:00 PM - 12:00 AM
同样有趣的是,如果删除comps.day+1,它会显示:

1/3/1, 9:00 PM - 1/4/1, 12:00 AM
这对我来说毫无意义。。。。1/3?!

更新:只有当endDate比startDate早一天时,才显示结果正确。如果休息时间超过一天,情况就不一样了。这感觉像是一个未定义的领域,没有按预期工作。

经过进一步调查(谢谢,布赖恩!),这似乎是一个苹果漏洞。我返回到使用本地化格式字符串连接两个
NSDateFormatter
s的结果。