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 に答える