NSCalendar 和 NSDateComponents 返回意外日期

发布于 2024-12-15 05:57:54 字数 753 浏览 0 评论 0原文

我正在尝试从 NSCalendar 和 NSDateComponents 创建一个 NSDate:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setTimeZone:[NSTimeZone localTimeZone]]; 
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:[self.day intValue]];
    [components setMonth:[self.month intValue]];
    [components setYear:[self.year intValue]];
    self.date = [calendar dateFromComponents:components];

当日、月、年为:9/31/2011时,NSDate 为10/1/2011 >。我在测试后设置了 NSCalendar 的时区,这并没有改变 NSDate。我也尝试过

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

,它给了我9/30/2011。有人发现我的计算方式有错误吗?

谢谢。

I'm trying to create an NSDate from NSCalendar and NSDateComponents with:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setTimeZone:[NSTimeZone localTimeZone]]; 
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:[self.day intValue]];
    [components setMonth:[self.month intValue]];
    [components setYear:[self.year intValue]];
    self.date = [calendar dateFromComponents:components];

When the day, month, year are : 9/31/2011 the NSDate is for 10/1/2011. I set the timezone for the NSCalendar after testing which didn't change the NSDate. I also tried

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

Which gave me back 9/30/2011. Anyone see an error in the way I'm calculating this?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

皓月长歌 2024-12-22 05:57:54

嗯,9 月 31 日确实是 10 月 1 日。

但组件必须知道在哪个日历中工作。以下代码来自苹果

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];

Well, september 31 is really october first.

But a component has to know in which calendar to work. The following code is from apple

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文