【问题标题】:NSDate results from -(NSDate *)dateFromComponents:(NSDateComponents *)compsNSDate 结果来自 -(NSDate *)dateFromComponents:(NSDateComponents *)comps
【发布时间】:2012-04-23 00:14:55
【问题描述】:

我想用 NSDateComponents 获得一个 NSDate 对象,但 NSDate 的时间比组件中的时间少 1 小时。

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setLocale:[NSLocale currentLocale]];
[cal setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *hourComp = [[NSDateComponents alloc] init];
hourComp.timeZone = [NSTimeZone localTimeZone];
[hourComp setHour:18];

NSLog(@"%@",hourComp);
NSLog(@"%@",[cal dateFromComponents:hourComp]);
NSLog(@"%@",[NSDate date]);

控制台输出:

2012-04-10 19:10:57.505 TestDate[9861:f803] <NSDateComponents: 0x6b6ad30>
TimeZone: Europe/Berlin (CEST) offset 7200 (Daylight)
Hour: 18
2012-04-10 19:10:57.507 TestDate[9861:f803] 0001-01-01 17:06:32 +0000
2012-04-10 19:10:57.508 TestDate[9861:f803] 2012-04-10 17:10:57 +0000

我想要的是 18:xx:xx

【问题讨论】:

    标签: objective-c nsdate nscalendar nsdatecomponents nstimezone


    【解决方案1】:

    我注意到您在欧洲,比格林威治标准时间早一小时。当您将日期设置为 18:xx 时,它认为您将其设置在欧洲,因此它会在将其存储在 GMT 之前减去一小时。当您将其打印出来时,您并没有要求将其格式化为当地时间,因此它会为您提供 GMT,即 17:xx。

    您需要使用 NSDateFormatter,并设置其区域设置和时区 - 就像您对 NSCalendar 对象所做的那样 - 然后在其上调用 stringFromDate,传递您创建的日期。

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多