我有NSDate
代表事件日期和时间的现有对象。我的任务是将现有事件的复制功能复制到具有除日和月之外的所有属性的其他日期(但保存小时和分钟)。我看到NSDate
了文档,但这里没有直接的方法。我可以使用标准方法添加几天,或者NSDateComponents
使用日历设置新日期,而不是添加或减去数量天数。
从上一个日期提取“HH:mm”字符串,将其设置为格式化字符串然后将其转换为新的 NSDate 是否正确?
我有NSDate
代表事件日期和时间的现有对象。我的任务是将现有事件的复制功能复制到具有除日和月之外的所有属性的其他日期(但保存小时和分钟)。我看到NSDate
了文档,但这里没有直接的方法。我可以使用标准方法添加几天,或者NSDateComponents
使用日历设置新日期,而不是添加或减去数量天数。
从上一个日期提取“HH:mm”字符串,将其设置为格式化字符串然后将其转换为新的 NSDate 是否正确?
与字符串相互转换可能不是最好的方法。我的建议是从日期开始制作一个 NSDateComponents 。然后您可以直接设置月份和日期,并转换回日期。
您已经概述了您需要的所有位:
其他答案已经足够了,但这是我使用其他答案作为指导的实现。
+ (NSDate*)useSameTimeAsDate:(NSDate*)priorDate butOnADifferentDate:(NSDate*)differentDate
{
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *priorComponents = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:priorDate];
NSDateComponents *newComponents = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:differentDate];
[newComponents setSecond:[priorComponents second]];
[newComponents setMinute:[priorComponents minute]];
[newComponents setHour:[priorComponents hour]];
return [cal dateFromComponents:newComponents];
}