-1

2 つの日付間の期間を形式に変換しようとしています"'P'yyyy'Y'M'M'd'DT'H'H'm'M's.S'S'"。私の予想される出力の例は次のとおりです: (これはDurationFormatUtilsP0Y0M0DT0H0M0.002Sを使用する Android プロジェクトのポートです)。

私のテストケース:

NSDateIntervalFormatter *durationFormatter = [NSDateIntervalFormatter durationFormatter];
NSDate *date = [NSDate date];
NSDate *end = [date dateByAddingTimeInterval:25];
NSString *duration = [durationFormatter stringFromDate:date toDate:end];
XCTAssertTrue( [duration hasPrefix:@"P"], @"Actual String: %@", duration );

私のフォーマッタは次のように定義されています。

+ (NSDateIntervalFormatter*) durationFormatter {
    static NSDateIntervalFormatter *formatter = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        formatter = [[NSDateIntervalFormatter alloc] init];
        formatter.dateTemplate = @"'P'yyyy'Y'M'M'd'DT'H'H'm'M's.S'S'";
    });

    return formatter;
}

これを実行すると、duration2015年 3 月 5 日 16:46:20.3になります。フォーマッターのロケールを にnil設定し、日付と時刻の形式を に設定するとNSDateIntervalFormatterFullStyleduration次の形式になります。午後 4 時 52 分 01 秒 GMT-05:00

2 つの日付間の期間を ISO8601 期間形式 (または少なくとも"'P'yyyy'Y'M'M'd'DT'H'H'm'M's.S'S'" ) でフォーマットするにはどうすればよいですか?

4

2 に答える 2

1

あなたは何のためにあるのかを誤解していNSDateIntervalFormatterます。start - endの形式の文字列として間隔をフォーマットするためのものです。

期間をフォーマットするためのものではありません。

を使用NSDateComponentsFormatterして期間をフォーマットできます。ただし、必要な特定の形式をサポートしているかどうかはわかりません。

便利なメソッド-stringFromDate:toDate:とがあり-stringFromTimeInterval:ます。

于 2015-03-05T22:33:14.100 に答える
1

使用しているクラス は、2 つの日付間の時差をフォーマットするのではなく、date1 - date2の形式の間隔NSDateIntervalFormatterを生成するように設計されています。

NSCalendarNSDateComponentsおよびstringWithFormat:(または同様の)を使用する必要がある後の自分を取得するには。

  • まず、カレンダーが必要です[NSCalendar currentCalendar]。良い選択です。(特定のカレンダーの単位で表現すると、時間の 2 つの絶対ポイントの違いが異なる可能性があります。それが意味をなさない場合は、心配しないで、そのまま使用してcurrentCalendarください!)

  • 次に、メソッドを使用して、2 つの日付の間の年数、日数、時間数などを含むcomponents:fromDate:toDate:options:インスタンスを取得します。NSDateComponents

  • 最後にstringWithFormat:、必要に応じてコンポーネントをフォーマットするために使用します。

HTH

于 2015-03-05T22:31:15.957 に答える