0

我有NSDate代表事件日期和时间的现有对象。我的任务是将现有事件的复制功能复制到具有除日和月之外的所有属性的其他日期(但保存小时和分钟)。我看到NSDate了文档,但这里没有直接的方法。我可以使用标准方法添加几天,或者NSDateComponents使用日历设置新日期,而不是添加或减去数量天数。

从上一个日期提取“HH:mm”字符串,将其设置为格式化字符串然后将其转换为新的 NSDate 是否正确?

4

3 回答 3

4

与字符串相互转换可能不是最好的方法。我的建议是从日期开始制作一个 NSDateComponents 。然后您可以直接设置月份和日期,并转换回日期。

于 2013-09-03T15:50:20.123 回答
1

您已经概述了您需要的所有位:

  1. 使用 NSDateComponents 将您的 NSDate 转换为其组件
  2. 获取小时/分钟/秒
  3. 将您的新日期隐藏到其组成部分
  4. 将小时/分钟/秒设置为您在步骤 2 中保存的值
  5. 再次将其转换回日期
于 2013-09-03T16:03:12.787 回答
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];
}
于 2014-02-10T19:42:51.720 回答