Iphone 如何通过更改12小时格式的上午/下午时段来更改日期?

Iphone 如何通过更改12小时格式的上午/下午时段来更改日期?,iphone,cocoa-touch,uikit,Iphone,Cocoa Touch,Uikit,在文档中,苹果举例说明了如何在现有日期上增加一些小时和分钟: NSDate *today = [NSDate date]; NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setHour:1]; [offsetComponents setMinutes:30]; NSDate *endOfWorldWar3 = [gregorian dateByAddingCompon

在文档中,苹果举例说明了如何在现有日期上增加一些小时和分钟:

NSDate *today = [NSDate date];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setHour:1];
[offsetComponents setMinutes:30];
NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:comps toDate:today options:0];
但现在,我有了日期,它是用AM/PM以12h格式打印出来的(unicode标准格式说明符是“a”)

所以我有一个日期对象,它被设置为8:00'点钟,现在我想把它切换到PM或20:00'点钟。很难解释。NSDateComponents没有用于此的组件

文档中说,所有这些NSDateComponents(如小时、分钟、天等)都与日历对象关联。有道理。但我在NSCalender中没有发现任何会说“这是12h格式”或“这是24h格式”的内容


那么实际上,当我改变小时周期时会发生什么?这难道不只是简单的数学问题吗“让我们休息12小时,或者让我们再加上12小时”?有什么想法吗?

NSDate只是一个瞬间的值。它的显示方式(无论是PM还是24小时格式)取决于格式

以下是一些格式化程序:

k gives you 24-hour hours
a gives you AM/PM

将该页面上的信息与NSDateFormatter一起使用,如下所示:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd 'at' kk:mm"];

NSDate *formatterDate = [inputFormatter dateFromString:@"1999-07-11 at 22:30:03"];

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"kk:mm 'on' EEEE MMMM d"];

NSString *newDateString = [outputFormatter stringFromDate:formatterDate];

NSLog(@"newDateString %@", newDateString);
// For US English, the output is:
// newDateString 22:30 on Sunday July 11