【问题标题】:Generating 1st of months of 20th century - Objective-C生成 20 世纪的第一个月 - Objective-C
【发布时间】:2013-02-03 20:01:03
【问题描述】:

我正在使用 Objective-C 创建一堆代码来确定从 1901 年 1 月 1 日到 2000 年 12 月 31 日的每个月的第一天。我想得到这个输出:

1/1/1901
1/2/1901
1/3/1901
.
.
.
1/11/2000
1/12/2000

但我得到了每个月的最后一天:

31/1/1901
28/2/1901
.
.
.
30/11/2000
31/12/2000

这是我的代码:

int main(int argc, const char * argv[])
{

@autoreleasepool {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    NSDate *date = [[NSDate alloc] init];
    date = [formatter dateFromString:@"01/01/1901"];
    NSDate *stopDate = [[NSDate alloc] init];
    stopDate = [formatter dateFromString:@"31/12/2000"];

    NSCalendar *cal = [NSCalendar currentCalendar];

    while ([[date earlierDate:stopDate] isEqualToDate:date]){
        NSDateComponents *comps = [cal components:NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date];

        if ([comps month] == 12){
            [comps setMonth:1];
            [comps setYear:[comps year]+1];
        }else{
            [comps setMonth:[comps month]+1];
        }

        date = [cal dateFromComponents:comps];
        NSLog(@"%@",date);
    }

}

return 0;
}   

我哪里错了?

【问题讨论】:

  • 对于初学者使用日期格式化程序输出日期:NSLog(@"date: %@", [formatter stringFromDate:date]);
  • 这如何解决问题?
  • 这不是一个解决方案。 OTOH,该代码对我有用。也许您的时区问题导致日期错误,请检查小时。日期的简单 NSLog 使用您的本地时区。
  • 它现在也适用于我。你说的格式化程序改变了一切(我真的很想知道如何)。这与时区无关,我没有使用小时数。
  • 为什么要指定NSWeekdayCalendarUnit?我想你的意思是使用NSDayCalendarUnit

标签: objective-c date nsdate nsdatecomponents date-formatting


【解决方案1】:

创建并显示具有相同时区的日期。使用

NSLog(@"date: %@", [formatter stringFromDate:date]);

打印日期。

NSLog(@"date: %@", date);

使用您当地的时区,包括小时。 NSDate 以相对于 GMT 的秒数为单位存储日期。

【讨论】:

    【解决方案2】:

    这是另一种方法:

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
    
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setDateStyle: NSDateFormatterShortStyle];
    
            NSCalendar *cal = [NSCalendar currentCalendar];
    
            NSDateComponents *comps = [[NSDateComponents alloc] init];
            [comps setDay:1];
    
            for (int year = 1901; year <= 2000; year++) {
                [comps setYear:year];
                for (int month = 1; month <= 12; month++) {
                    [comps setMonth:month];
    
                    NSDate *date = [cal dateFromComponents:comps];
                    NSLog(@"%@", [formatter stringFromDate:date]);
                }
            }
        }
    
        return 0;
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2019-05-07
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多