0

我想列出(NSLog)格鲁吉亚日历年(2013 年)的所有日期。我设法使用以下方法获取当前日期:

    NSCalendar*       calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents* components = [calendar components:NSDayCalendarUnit
                                               fromDate:currDate];
    NSInteger  day = [components day];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    NSString *dateString = [dateFormatter stringFromDate:currDate];
    NSLog(@"%@", dateString);

如何打印出 2013 年的所有日期?

4

2 回答 2

3
NSDateFormatter* dateFormatter = [NSDateFormatter new] ;
dateFormatter.dateStyle = NSDateFormatterLongStyle ;

NSDate* today = [NSDate date] ;
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] ;
NSDateComponents* thisYearComponents = [calendar components:NSYearCalendarUnit fromDate:today] ;
NSDate* firstDateInThisYear = [calendar dateFromComponents:thisYearComponents] ;

NSDateComponents* addDaysComponents = [NSDateComponents new] ;
addDaysComponents.day = 0 ;

while ( TRUE ) {
    NSDate* nextDateInThisYear = [calendar dateByAddingComponents:addDaysComponents toDate:firstDateInThisYear options:0] ;
    NSDateComponents* yearOfNextDateComponents = [calendar components:NSYearCalendarUnit fromDate:nextDateInThisYear] ;
    if ( yearOfNextDateComponents.year == thisYearComponents.year )
        NSLog(@"%@", [dateFormatter stringFromDate:nextDateInThisYear]) ;
    else
        break ;
    addDaysComponents.day += 1 ;
}

WWDC 2011 session 117 - Performing Calendar Calculations是一个很好的信息来源。它介绍了为什么最好在循环中将n天数添加到固定的参考日期,而不是重复地将 1 天添加到最近使用的日期。

它还建议在您不关心时间的 NSDate 中使用中午(中午 12 点)而不是午夜(上午 12 点),因为夏令时会导致某些地方的某些日期不存在午夜。但在我的例子中,我没有费心去做。

于 2013-01-31T16:58:34.910 回答
-1
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:@"2013-01-01"];


NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [calendar components:kCFCalendarUnitYear fromDate:date];

while ([components year] < 2014) {
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateStyle:NSDateFormatterLongStyle];
    NSString *dateString = [dateFormatter1 stringFromDate:date];
    NSLog(@"%@", dateString);
    date = [NSDate dateWithTimeInterval:60*60*24 sinceDate:date];
    components = [calendar components:kCFCalendarUnitYear fromDate:date];
}
于 2013-01-31T17:06:07.237 回答