从NSCalendar获得一个月的第一天

bog*_*gen 8 cocoa cocoa-touch calendar nscalendar nsdatecomponents

我有一个方法的子集,需要获得当月的第一天.

NSDate *today = [NSDate date];  // returns correctly 28 february 2013
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *dayOneInCurrentMonth = [gregorian dateByAddingComponents:components toDate:today options:0];
Run Code Online (Sandbox Code Playgroud)

dayOneInCurrentMonth然后打印出来2013-03-01 09:53:49 +0000,下个月的第一天.

我如何获得当月的第一天?

Fab*_*ser 17

你的逻辑是错误的:你没有将日期设置为1,而是在当前日期添加一天.

尝试类似的东西:

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [gregorian components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:today];
components.day = 1;

NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components];
Run Code Online (Sandbox Code Playgroud)

  • 好的,@ Fabian Kreiser,我按原样使用了代码,它给了我结果:`2015-05-31 21:00:00 UTC`.今天是`2015-06-08 8:36`.它不会返回第1天,但是从上个月开始? (2认同)