秒直到指定的一周

时间:2014-01-16 01:51:27

标签: ios objective-c

我在计算一周中指定日期之前的秒数时遇到一些麻烦。

  • 例如,从当前时间(秒)计算到星期日的秒数。
  • 计算必须是动态的,因此它适用于每个星期日。

有没有办法在没有指定具体日期的情况下完成此任务?

2 个答案:

答案 0 :(得分:2)

您需要使用NSCalendarNSDateComponents。请参阅下面的代码示例。如果您想要美国正确的7天工作周,请确保将日历设置为“格里高利”。

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned unitFlags = NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *comps = [gregorian components:unitFlags fromDate:date];

// Just a test line for your benefit.  
NSLog(@"%li %li %li %li",(long)comps.weekday,(long)comps.hour, (long)comps.minute, (long)comps.second);

// I did this kinda fast - check it over good. Will need some sort of if statement in case the current day is Sunday (7)
NSInteger sec = (60 - comps.second) + (60 - comps.minute)*60 + (24 - comps.hour)*3600 + (6 - comps.weekday)*24*60*60;
NSLog(@"%li",sec);

您必须稍微修改一下以供您使用。例如,如果您希望星期几是一个变量等,但这应该让您走上正确的轨道。

希望这会有所帮助。祝你好运。

修改

请参阅下面的Duncan的评论,了解实际计算秒数的更好方法。

答案 1 :(得分:1)

NSCalendar类有很多方法可以解决这类问题。在Xcode中搜索“日历计算”以获取更多信息。

你需要一个Gregorian NSCalendar(或其他类型的日历,如中文,阿拉伯语,希伯来日历)NSDates和NSDateComponents对象。

查看方法组件:fromDate:toDate:options:特别是。

编辑:那将教我留下未完成的答案并去做菜。

与Dylan的帖子有一点不同:我会使用当前的NSDate,将其转换为组件,然后将星期几设置为所需的未来一周,然后转换回NSDate,最后取两个日期之间的差异使用NSDate方法timeIntervalSinceDate。