如何在 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];
}
我尝试从 [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];
}