【发布时间】:2011-01-18 22:35:37
【问题描述】:
我正在尝试做一些对我来说有点困难的事情。但我相信有人有一些见解。
给定一个日期,比如January 17, 2011,我试图找出与一年前的这个日期相对应的日期。所以January 17, 2011 是星期一,而一年前,这一天落在January 18, 2010(也是星期一)。原来January 18, 2010 比January 17, 2011 早了354 天。我原本以为只是简单地减去非闰年的 365 天和闰年的 366 天,但如果你在这种情况下这样做,你会得到January 17, 2010,这是一个星期日,而不是星期一。
那么,在带有NSDate 和NSCalendar 的Objective-C 中,我该如何实现这样的功能:
-(NSDate *)logicalOneYearAgo:(NSDate *)from {
}
换句话说,第 n 个月的第 n 个“工作日”(其中“工作日”是星期一、星期二或星期三等)
【问题讨论】:
-
您必须更好地准确定义您的期望是什么;从 2011 年 1 月 17 日起的一年前是 2010 年 1 月 17 日。您想要(例如)第 n 个月的第 n 个星期一吗?
-
是的,第n个月的第n个“工作日”。
-
这个月有五个星期一,而 2010 年 1 月只有四个。在这个日期方案中,2011 年 1 月 31 日之前一年的日期是什么?
-
en.wikipedia.org/wiki/ISO_week_date 日历可能在这里有用。但总的来说,请注意;历法算术在所有情况下都异常难以正确。
-
我会尝试使用
NSCalendar使用NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekdayOrdinalCalendarUnit | NSWeekdayCalendarUnit将日期分解为NSDateComponents。但是我还没有尝试过,所以你必须看看你是否可以让它工作。
标签: iphone objective-c ios nsdate nscalendar