如何通过以12h格式更改AM / PM小时数来更改日期?

时间:2009-09-04 10:55:05

标签: iphone cocoa-touch uikit

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

NSDate *today = [NSDate date];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setHour:1];
[offsetComponents setMinutes:30];
NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:comps toDate:today options:0];

但现在,我的日期以12h格式打印出AM / PM(unicode标准格式说明符为“a”)。

所以我有一个日期对象设置为8点钟,现在我想将它切换到PM或20:00时钟。难以解释。 NSDateComponents没有相应的组件。

文档说所有这些NSDateComponents的事情,如小时,分钟,日等,都与日历对象有关。说得通。但是我没有在NSCalender中找到任何可以说“这是12h格式”或“这是24h格式”的内容。

实际上,当我改变小时数时会发生什么?这实际上只是简单的数学说“让我们休12小时,或者让我们加12小时”?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

NSDate只是一个时刻的价值。如何显示它,无论是PM还是24小时格式,都在格式化中。

以下是一些格式化程序:

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

来自here

将该页面上的信息与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