如何在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];
}