【问题标题】:NSDateComponents specifying AM/PM?NSDateComponents 指定上午/下午?
【发布时间】:2012-10-22 04:18:36
【问题描述】:

我正在使用以下字符串中的NSDateComponents 建立一个日期:

"2014-05-17 02:39:00 PM +0000"

当我设置所有组件并返回我得到的 NSDate 时(参见下面的方法):

"2014-05-17 02:39:00 AM +0000"

我的问题是,有没有办法将 AM/PM 指定为 NSDateComponent,或者如果源日期是 PM,我是否只需将 12 添加到我的小时?

- (NSDate *)dateFromYear:(int)year month:(int)month day:(int)day hour:(int)hour minute:(int)minute {
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    [components setYear:year];
    [components setMonth:month];
    [components setDay:day];
    [components setHour:hour];
    [components setMinute:minute];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    return [calendar dateFromComponents:components];
}

【问题讨论】:

  • 使用 24 小时值,而不是 12 小时值。
  • 嗨@rmaddy,这就是我在 PM 值上加 12 所做的,不幸的是,来自客户端的数据使用 12 小时 AM/PM 表示法。

标签: iphone objective-c cocoa-touch nsdatecomponents


【解决方案1】:

显然,NSDateComponents 似乎没有指定这一点。 苹果自己的文档是这样说的:

重要提示:一个 NSDateComponents 对象本身是没有意义的;你 需要知道它被解释的日历,你需要 知道这些值是否是单位的绝对值,或者 单位数量。

除了您的 12 小时逻辑之外,您还可以交替使用使用 AM/PM 的 NSDate 类 dateWithNaturalLanguageString 并以某种方式将其用于您的目的。

【讨论】:

  • NSDate dateWithNaturalLanguageString 不在 iOS 中 - 仅适用于 OS X。
  • 但是,如果格式固定得相当好,您可以使用NSDateFormatter dateFromString。不过,您确实需要确保首先将格式化程序的语言环境设置为 @"en_US_POSIX"。
猜你喜欢
  • 2012-03-28
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多