2015-06-08 2 views
1

Я пытаюсь получить первую дату за текущий месяц от [NSDate new]. Моя проблема в том, что вместо 2015/06/01 Я всегда получаю 2015/05/31. Я даже пытаюсь преобразовать строку в NSDate, и я все еще получаю 2015/05/31.Как в iOS получить первую дату месяца?

Вот мой код (второй элемент):

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

Результат:

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

EDIT:

Хорошо, я понимаю свою ошибку - я дон Неправильно проверить результаты моих операций. Они всегда приводят к UTC. 10x, для ответа и всех комментариев. В следующий раз я буду более осторожен.

+1

То, что вы видите, это время в 'UTC' часовой пояс. – Jens

+1

Вы правильно поняли дату, вы просто не проверяете ее правильно. – Sulthan

ответ

1
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 
+1

ОК, вы создаете экземпляр 'NSDateComponents', а затем вы его фактически не используете. Почему это? – Droppy

+0

Согласитесь с @Droppy, почему у вас есть: 'self.currentDate = [calendar dateFromComponents: components];'. Во-вторых, он дает мне «EXC_BAD_ACCESS». Код является копией/вставкой с вашего. – new2ios

+0

я обновить свой ответ, пожалуйста, проверьте @ new2ios –

0

Создание NSDateComponents из [NSDate date], установите текущий день 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]; 
}