首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTime:为什么[NSDateComponent date]在这里返回0?

NSTime:为什么[NSDateComponent date]在这里返回0?
EN

Stack Overflow用户
提问于 2014-02-15 00:24:38
回答 1查看 3.3K关注 0票数 7

我想将NSDate从一个时区转换到另一个时区。

这是我的代码:

代码语言:javascript
复制
NSDate* convertTime(NSDate* fromDate, NSTimeZone* fromTimeZone, NSTimeZone* toTimeZone) {
    if (fromTimeZone == toTimeZone) {
        return fromDate;
    }

    NSCalendarUnit val = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour| NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitTimeZone;
    NSCalendar* dupCal =  [[NSCalendar currentCalendar] copy];

    [dupCal setTimeZone:toTimeZone];
    NSDateComponents *dupComponents = [dupCal components:val fromDate:fromDate];

    return [dupComponents date]; // <- Why return nil?

}

int testTimeZone() {
    NSDate* res = convertTime([NSDate date], [NSTimeZone defaultTimeZone], [NSTimeZone timeZoneWithName:@"America/New_York"]);
    NSLog(@"convertTime: %@", res);
    return 0;

}

在“输出”窗口中,我可以看到以下打印结果:

代码语言:javascript
复制
2014-02-15 11:15:18.040 MyApp[28742:70b] convertTime: (null)

由于某些原因,return [dupComponents date];总是返回零,即使我可以在调试器中清楚地看到它是正确初始化的。它包含了我期望的值。

代码语言:javascript
复制
Printing description of dupComponents:
<NSDateComponents: 0x100112260>
    TimeZone: America/New_York (EST) offset -18000
    Calendar Year: 2014
    Month: 2
    Leap month: no
    Day: 14
    Hour: 19
    Minute: 19
    Second: 29

为甚麽是这样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-15 03:26:12

我找到解决办法了。

在调用NSDateCompoent之前,我需要将日历对象设置为date对象

代码语言:javascript
复制
NSDateComponents *dupComponents = [dupCal components:val fromDate:fromDate];

[dupComponents setCalendar:dupCal]; // THIS IS THE SOLUTION

return [dupComponents date]; 
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21791806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档