【问题标题】:How to change a date by changing AM / PM hours period in 12h format?如何通过更改 12 小时格式的上午/下午时间段来更改日期?
【发布时间】:2009-09-04 10:55:05
【问题描述】:

在文档中,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];

但是现在,我有日期,它以 12 小时格式和 AM / PM 打印出来(unicode 标准格式说明符是“a”)。

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch uikit


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-03-20
      • 2011-11-16
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多