【问题标题】:iOS How to get day number of the year? [duplicate]iOS 如何获取一年中的天数? [复制]
【发布时间】:2012-06-17 07:17:18
【问题描述】:

可能重复:
How do you calculate the day of the year for a specific date in Objective C

我需要获取一年中的天数,但不知道哪种方法最好。

例子:

2012 年 1 月 21 日 -> 21

2012 年 2 月 2 日 -> 33

2012 年 3 月 2 日 -> 62

2011 年 3 月 2 日 -> 61

有什么想法吗?

谢谢

【问题讨论】:

  • 为什么投反对票?这是对有效逻辑需求的有效问题吗?

标签: ios numbers nsdate days leap-year


【解决方案1】:

首先你创建一个字典,比如:

[Jan => 30,
Feb =>  28,
 ...] 

每月所有天数。

  • 其次是您的日期,例如:2012 年 6 月 13 日。
  • 您将添加 6 月前一个月的所有值(在您的字典中显示一段时间)。
  • 最后添加日期(此处:13)。

【讨论】:

  • 闰年呢?这不是一个好习惯
【解决方案2】:

查看 NSTimeInterval。您可以获得两个日期之间经过的秒数:

NSTimeInterval secondsElapsed = [secondDate timeIntervalSinceDate:firstDate];

所以您的 firstDate 可以是年初。然后你可以除以 3600*24(每天的秒数)得到天数。

【讨论】:

  • 这实际上是不正确的,我是这个话题的新手,但使用 NSCalendar(或 NSDateFormatter)会是更安全的方法:infiniteundo.com/post/25326999628/…
  • docs 也涵盖了这一点:“如果您想知道一年中的第几天,您可以使用 NSCalendar 类的 ordinalityOfUnit:inUnit:forDate: 方法。”跨度>
【解决方案3】:

查看以下解决方案您必须使用 timeIntervalSinceDate:为此

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];

    NSDate *date1 = [dateFormatter dateFromString:@"2012-01-01"];
    NSDate *date2 = [NSDate date]; 
    NSLog(@"date %@ ", date2);

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];

    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
    [timeFormat setDateFormat:@"HH:mm:ss"];

    NSDate *now = [[NSDate alloc] init];

    NSString *theDate = [dateFormat stringFromDate:now];
    NSDate *dt = [dateFormat dateFromString:theDate];


    NSTimeInterval diffDays = [dt timeIntervalSinceDate:date1];
    NSLog(@"Date %f ^^^^ ", diffDays/(24*60*60));

【讨论】:

    【解决方案4】:

    我参加聚会有点晚了,但无论如何,就这样吧:

     NSDate *today = [NSDate date];
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"DDD"];
     NSInteger dayInYear = [[dateFormat stringFromDate:today] integerValue];
     NSLog(@"today is %d. day in year", dayInYear);
    

    2012 年 6 月 14 日的结果:今天是一年中的第 166 天

    编辑:我很惊讶 Google 上没有容易找到的示例。

    您还可以使用格式 @"DD" 获取月份中的日期或使用 @"D" 获取星期中的日期。

    EDIT2:请注意:创建NSDateFormatter 可能是相当昂贵 的操作。如果您的班级经常使用此函数,您可能需要创建一个静态格式化程序 ivar。

    【讨论】:

    • +1 用于使用 NSDateFormatter 解决问题。我喜欢有两种方法来做某事。
    • 谢谢! +1 回复你 :) 我同意,做某事的更多方式当然很有趣。
    猜你喜欢
    • 2023-04-02
    • 2020-01-29
    • 2013-03-25
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多