我在计算一周中指定日期之前的秒数时遇到一些麻烦。
有没有办法在没有指定具体日期的情况下完成此任务?
答案 0 :(得分:2)
您需要使用NSCalendar
和NSDateComponents
。请参阅下面的代码示例。如果您想要美国正确的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。