NSDate为该月的第一天

Sko*_*ota 28 iphone cocoa-touch nsdate nscalendar

这是一个非常简单的概念,但到目前为止,我一直无法找到一个优雅的(和日历区域独立)解决方案.我需要找到一个任意的月份的第一天NSDate.例如,给定一个任意NSDate(arbitraryDate)将返回另一个NSDate对象(让我们调用它firstDayOfMonthDate),它代表该月的第一天arbitraryDate.时间组件并不重要,因为我只需要在该月的第一天使用NSDate对象(尽管为了整洁,如果时间刚刚归零,它将是有用的).

在此先感谢您的任何帮助.

dic*_*ciu 68

可能的解决方案:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *arbitraryDate = [NSDate date];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:arbitraryDate];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用[NSCalendar currentCalendar] (9认同)
  • 来自我的@diciu +1 ..虽然有效但可能是时间错误我得错了日期.我怎么能设置它.通过日期2012-04-26 06:55:40 +0000我正在2012-03-31 18:30:00 +0000. (5认同)

fal*_*ypt 7

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear 
                                                               fromDate:[NSDate date]];
components.day = 1;
NSDate *firstDayOfMonthDate = [[NSCalendar currentCalendar] dateFromComponents: components];
NSLog(@"First day of month: %@", [firstDayOfMonthDate descriptionWithLocale:[NSLocale currentLocale]]);
Run Code Online (Sandbox Code Playgroud)