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

如何在iOS中获取当月的第一个日期?,ios,objective-c,nsdate,Ios,Objective C,Nsdate,我尝试从[NSDate new]获取当月的第一个日期。我的问题是,我总是收到2015/05/31,而不是2015/06/01。我甚至尝试将字符串20150601转换为NSDate,但仍然收到2015/05/31 这是我的代码(第二个元素): 结果是: (lldb) print currentMonth (__NSDate *) $0 = 0x79e64820 2015-05-31 21:00:00 UTC 编辑: 好的,我理解我的错误-我没有正确检查我的手术结果。它们总是导致UTC。 10倍,

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

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

结果是:

(lldb) print currentMonth
(__NSDate *) $0 = 0x79e64820 2015-05-31 21:00:00 UTC
编辑:

好的,我理解我的错误-我没有正确检查我的手术结果。它们总是导致
UTC
。 10倍,用于回答和所有评论。下次我会更小心的

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];
}

您看到的是
UTC
时区中的时间。您获取的日期是正确的,只是没有正确地检查它。好的,您创建了一个
NSDateComponents
实例,然后实际不使用它。为什么会这样?同意@Droppy,为什么有:
self.currentDate=[CalendarDateFromComponents:components]。其次,它给了我
EXC\u BAD\u访问权限
。代码是从您的代码复制/粘贴的。关键是,您不应该使用
NSLog()
po dayoneincurentmonth
来显示日期,因为它使用
[NSDate description]
将以UTC格式打印日期,这从根本上来说让您感到困惑。这个问题已经在这个网站上讨论过很多次了。好的,@dropy:
(lldb)po dayoneincrearentmount 2015-05-31 21:00:00+0000
。可能NSDate到输出之间的转换确实是我的问题。我查一下,10倍。显然,
po
的工作方式与本例中的
print
相同。否(重申)不要使用
NSLog()
- (NSDate *) dateAtStartOfMonth
{
    //Not tested!!!
    NSDateComponents *comp = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
    [comp setDay:1];
    return [[NSCalendar currentCalendar] dateFromComponents:comp];
}