如何在 iOS 中获取该月的第一个日期?

How in iOS to get first date of the month?

我尝试从 [NSDate new] 获取当月的第一个日期。我的问题是,我总是收到 2015/05/31 而不是 2015/06/01。我什至尝试将字符串 20150601 转换为 NSDate 但我仍然收到 2015/05/31.

这是我的代码(第二个元素):

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"yyyyMMdd"];
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
    currentMonth = [dateFormatter dateFromString:@"20150601"];

结果是:

(lldb) print currentMonth
(__NSDate *) [=12=] = 0x79e64820 2015-05-31 21:00:00 UTC

编辑:

好的,我明白我的错误 - 我没有正确检查我的操作结果。它们总是导致 UTC。 10x,用于回答和所有评论。下次我会小心的。

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

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

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSTimeZone *zone = [NSTimeZone localTimeZone];
[formatter setTimeZone:zone];
[formatter setDateFormat:@"yyyyMMdd"];


NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components];
NSString *currentMonth = [formatter stringFromDate:dayOneInCurrentMonth];
NSLog(@"%@",currentMonth);

输出

2015-06-08 14:07:30.924 NSDATEDemo[1943:39838] 20150601

[NSDate date] 创建 NSDateComponents,将当前日期设置为 1 并重新创建您的 NSDate 对象:

- (NSDate *) dateAtStartOfMonth
{
    //Not tested!!!
    NSDateComponents *comp = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
    [comp setDay:1];
    return [[NSCalendar currentCalendar] dateFromComponents:comp];
}