我有NSDate
个对象代表事件的日期和时间。我的任务是将现有事件的复制功能复制到除日期和月份之外的所有属性的其他日期(但节省了小时和分钟)。我看到NSDate
文档,但这里没有直接的方法。我可以使用标准方法或NSDateComponents
添加几天,但新日期将使用日历设置,而不是添加或减少数量天数。
从上一个日期提取“HH:mm”字符串是正确的方法,将其设置为格式化字符串然后将其转换为新的NSDate吗?
答案 0 :(得分:4)
转换为字符串和从字符串转换可能不是最好的方法。我的建议是从日期开始制作一个NSDateComponents。然后,您可以直接设置月份和日期,然后转换回日期。
答案 1 :(得分:1)
您已经概述了所需的所有内容:
答案 2 :(得分:1)
其他答案已经足够,但这是我的实施,使用其他答案作为指导。
+ (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];
}