gpt4 book ai didi

ios - 从日历组件创建 NSDate 时出现 1 错误

转载 作者:行者123 更新时间:2023-11-28 22:25:11 25 4
gpt4 key购买 nike

我正在尝试使用“NSDate for first day of the month”中提供的解决方案来获取月份的第一天。

我的代码在 NSDate 类别中:

- (NSDate *)firstDayInMonthOfDate {
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:self];
comps.timeZone = calendar.timeZone;
NSDate *startDate;
[comps setDay:1];
startDate = [calendar dateFromComponents:comps];
return startDate;
}

这会产生上个月的最后一天....示例:

self = date: 2013-11-02 22:00:00  

comps = <NSDateComponents: 0x749b4c0>
TimeZone: Europe/Bucharest (GMT+03:00) offset 10800 (Daylight)
Calendar Year: 2013
Month: 11
Leap month: no
Day: 1

startDate = 2013-10-31 22:00:00 +0000

所以,为了获得正确的日期,我必须设置 comps.day = 2。我只是不明白额外的 1 是从哪里来的。

[编辑] 我想使用 Collection View 单元格的日期,所以我想要一种可靠的方法来获取月份的第一个日期,例如。 2013-11-01

[编辑] 使用 NSDateFormatter 打印日期给出了正确的结果 (2013-10-31)。 po 和 NSLog 的问题是它们没有正确解释时区(2012-12-31 10pm + 3h GMT != 2013-01-01 12am)我推荐一个日期编程教程:http://rypress.com/tutorials/objective-c/data-types/dates.html

最佳答案

您的结果正确

调试器中的

NSLog(@"%@", startDate)po startDate始终打印与 GMT 相关的日期,并且

 startDate = 2013-10-31 22:00:00 +0000

与 GMT+2 中的 2013-11-01 00:00:00 相同,这是您所在的时区。

请注意,您可以简化您的代码

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate;
[calendar rangeOfUnit:NSMonthCalendarUnit startDate:&startDate
interval:NULL forDate:self];
return startDate;

关于ios - 从日历组件创建 NSDate 时出现 1 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19206122/

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