NSDate的。同时创建新日期

时间:2013-09-03 15:48:00

标签: objective-c nsdate nsdateformatter

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

您已经概述了所需的所有内容:

  1. 使用NSDateComponents
  2. 将NSDate转换为其组件
  3. 获取小时/分钟/秒
  4. 将新日期转换为其组件
  5. 将小时/分钟/秒设置为您在步骤2中保存的值
  6. 将其转换回日期

答案 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];
}