4

Youtube API は日付文字列を RFC3339 形式で返します。とにかく、これは長すぎます。

- (NSString *)userVisibleDateTimeStringForRFC3339DateTimeString:(NSString *)rfc3339DateTimeString
    // Returns a user-visible date time string that corresponds to the
    // specified RFC 3339 date time string. Note that this does not handle
    // all possible RFC 3339 date time strings, just one of the most common
    // styles.
{
    NSString *          userVisibleDateTimeString;
    NSDateFormatter *   rfc3339DateFormatter;
    NSLocale *          enUSPOSIXLocale;
    NSDate *            date;
    NSDateFormatter *   userVisibleDateFormatter;

    userVisibleDateTimeString = nil;

    // Convert the RFC 3339 date time string to an NSDate.

    rfc3339DateFormatter = [[[NSDateFormatter alloc] init] autorelease];

    enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];

    [rfc3339DateFormatter setLocale:enUSPOSIXLocale];
    [rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    [rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    date = [rfc3339DateFormatter dateFromString:rfc3339DateTimeString];
    if (date != nil) {

        // Convert the NSDate to a user-visible date string.

        userVisibleDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
        assert(userVisibleDateFormatter != nil);

        [userVisibleDateFormatter setDateStyle:NSDateFormatterShortStyle];
        [userVisibleDateFormatter setTimeStyle:NSDateFormatterShortStyle];

        userVisibleDateTimeString = [userVisibleDateFormatter stringFromDate:date];
    }
    return userVisibleDateTimeString;
}

関数にこれを含めることはできますが、Cocoa の基盤や標準の C または POSIX ライブラリでこれを行う方法が事前に定義されているかどうかを知りたいです。また、あるなら利用したいです。もっと簡単な方法があれば教えてください。または、これが最も簡単な方法であることを確認していただければ幸いです:)

4

3 に答える 3

2

ココアに付属する純粋な方法は、まさにあなたがしていることです。initおそらくで、他の場所で日付フォーマッターを作成し、このメソッドでそれらを使用/再利用することで、このメソッドをより短く、より速くすることができます。

于 2012-01-16T18:28:29.493 に答える
2

小数秒はオプションであり、タイムゾーンは Z ではなく Z5 である必要があるため、2 つのフォーマットが必要です。そのため、フォーマットを使用して 2 つのフォーマッターを作成します。

@"yyyy'-'MM'-'dd'T'HH':'mm':'ssX5"
@"yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSSSSSX5"

両方試してみてください。これは明らかに RFC3339 用です。文字列がその形式ではない可能性があります。正しく行うのが面倒な RFC822 を要求しなくてよかったです。しかし、実際には NSDate を返すメソッドを最初に用意する必要があります。これは、ほとんどの使用では、実際にはユーザー用にフォーマットされた文字列を必要としないためです。

于 2014-05-15T11:47:01.723 に答える