1

粗野な JSON 文字列の日付を変換する際に問題があります。

"created_at" = "2012-12-22T21:39:22Z";

NSDateに。

そのための私の現在のカテゴリは次のとおりです。

- (NSDate*)dateWithJSONString
{
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
NSDate *date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:self];
return date;        
}

問題は、これが私のケースの 95% で機能することですが、カスタム国際設定と組み合わせた日付と時刻の設定で 24 時間ではなく AM/PM を使用するユーザーがいる場合、日付は json 文字列から作成されません。

このディスカッションを読みましたが、海外のすべてのユーザーと設定で作業するための良い方法が見つかりません。

たとえば、これを追加しました:

[dateFormatter setLocale:[NSLocale currentLocale]];

しかし、それは何も変わりませんでした。iPhone を 24 時間ではなく AM/PM に設定すると、NSDate が作成されません。

AM/PM NSDate スキーマ: 2013-01-21 07:12:43 AM +0000

24H NSDate スキーマ: 2013-01-21 07:12:43 +0000

私は何を取りこぼしたか ?日付形式で更新するものはありますか?

4

3 に答える 3

12

正しいdateFormatを設定するだけで、残りのコードは正しいです。

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];

dateStringの文字Zは、ISO8601 で定義された有効な日付形式であり、日付文字列が UTC タイムゾーンであることを示します。したがって、タイムゾーンをフォーマッタに設定する必要はありません。フォーマッタは、文字からタイムゾーンを認識できますZ。そのため、タイムゾーンが dateFormatter に指定されていない限り、無視するとタイムゾーンに不一致が生じます。

dateString が統一されていない場合は、dateFormat のフォールバック チェックを入れてください。変換された日付が nil であることを確認します。nil の場合はフォールバック dateFormat を使用します。

また、日付文字列のカレンダーの種類とシステム カレンダーに変更がない限り、カレンダーを dateFormatter に設定する必要はありません。

于 2013-06-18T12:44:09.863 に答える
9

私は同じことをしようとしていましたが、私の場合、JSON 日付にはミリ秒も含まれており、日付は MongoDB から供給されています。

ミリ秒がある場合の書式設定のスニペットは次のとおりです (例: 2014-02-27T09:30:00.000Z)

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSz"];
于 2014-02-23T23:58:46.403 に答える
1

私にとって完璧に機能する以下のコードを使用してください。

 NSString* strDate = [jsonObj objectForKey:@"created_at"];
 NSDate *date = [self dateWithJSONString:strDate];

- (NSDate*)dateWithJSONString:(NSString*)dateStr
{
    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    NSDate *date = [dateFormat dateFromString:dateStr];

    // This is for check the output
    // Convert date object to desired output format
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; // Here you can change your require output date format EX. @"EEE, MMM d YYYY"
    dateStr = [dateFormat stringFromDate:date];
    NSLog(@"Date -- %@",dateStr);

    return date;
}

日付形式の問題

于 2013-01-21T10:05:05.967 に答える