gpt4 book ai didi

ios - NSCalendar dateFromComponents 返回错误日期 2

转载 作者:可可西里 更新时间:2023-11-01 05:41:42 26 4
gpt4 key购买 nike

我想找出一年中第一个星期的日期:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:1];
[components setWeekOfMonth:1];
[components setWeekday:1];
NSDate *newDate = [calendar dateFromComponents:components];
NSLog(@"%@",newDate);

我得到的是:

2012-12-29 23:00:00 +0000

当我比较我的 mac 日历时,我需要得到的是:

2012-12-31 23:00:00 +0000

有什么建议吗?

最佳答案

(我知道你现在已经弄清楚发生了什么,但为了 future 的读者......)

看看你在这里做什么:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:1];
[components setWeekOfMonth:1];
[components setWeekday:1];

让我们以今天(2013 年 2 月 28 日)为例,看看我们在每一步之后得到了什么(假设;我无法检查这个!):

  • setYear:2013 - 没有变化,因为年份已经是 2013
  • setMonth:1 - 更改为一月:2013-01-28
  • setWeekOfMonth:1 - 更改为 2013 年 1 月第一周的同一天(星期四):2013-01-03
  • setWeekday:1 - 更改为同一周的星期日:2012-12-30

现在,当您打印出 2012-12-30 的本地午夜时,但在 UTC 中,您会得到“2012-12-29 23:00:00 +0000”,因为您的本地时区可能提前 1 小时UTC 时间。

正如您已经确定的那样,您需要 setDay 而不是 setWeekOfMonth/setWeekday,假设您真的想要“1 月 1 日”而不是而不是“1 月第 1 周的星期日”。

关于ios - NSCalendar dateFromComponents 返回错误日期 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com