NSDateComponents 给出了错误的 2 月 28 日日期

发布于 2024-10-28 19:26:51 字数 424 浏览 1 评论 0原文

我正尝试在二月内进行搜索。所以我想弄清楚最后一天是 28 还是 29。我正在从 3 月底做减法,

NSDate* endFeb = [march dateByAddingTimeInterval: (NSTimeInterval) -24 * 3600];
NSDateComponents *feb = [gregorian components: units fromDate: endFeb];

这给了我正确的日期,但不是正确的日期。

(gdb) po [gregorian dateFromComponents: feb]
2011-02-28 00:00:00 +0000
(gdb) p (int) [feb day]
$1 = 27

如果重要的话,这是在 iPad 4.3 模拟器上。

I'm attempting to do a search within February. So I want to figure out if the last day is 28 or 29. I'm doing a subtraction from the end of March

NSDate* endFeb = [march dateByAddingTimeInterval: (NSTimeInterval) -24 * 3600];
NSDateComponents *feb = [gregorian components: units fromDate: endFeb];

which gives me the correct date but not the right day

(gdb) po [gregorian dateFromComponents: feb]
2011-02-28 00:00:00 +0000
(gdb) p (int) [feb day]
$1 = 27

This is on the iPad 4.3 simulator if it matters.

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

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

发布评论

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

评论(1

柠檬心 2024-11-04 19:26:51

要确定 2 月是 28 天还是 29 天,您可以使用类似以下的代码:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2008];
[components setMonth:2];
[components setDay:1];
NSDate *febDate = [calendar dateFromComponents:components];

NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:febDate];

NSLog(@"%u days in february", range.length);

这样您就不必弄乱时区偏移。我猜这是你的代码的问题。

To figure out if february has 28 or 29 days you would use something like this:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2008];
[components setMonth:2];
[components setDay:1];
NSDate *febDate = [calendar dateFromComponents:components];

NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:febDate];

NSLog(@"%u days in february", range.length);

This way you don't have to mess with timezone offsets. I guess this is the problem with your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文