1

JSON応答の日付値をフォーマットしようとしています:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
    //Wed Dec 01 17:08:03 +0000 2010
    [df setDateFormat:@"eee, MMM dd HH:mm:ss ZZZZ yyyy"];
    NSDate *date = [df dateFromString:[twitter objectForKey:@"created_at"]];
    [df setDateFormat:@"dd/MM/yyyy"];
    NSString *dateStr = [df stringFromDate:date];

私はこの質問の指示に従います:

iOSでの日付/時刻の解析:タイムゾーンを処理する(または処理しない)方法は?

実際、JSON応答の日付値は次のとおりです。

created_at":"Mon, 28 May 2012 11:20:29 +0000"

によって値を受け取るとき、日付変数はnilです。[df dateFromString:[twitter objectForKey:@"created_at"]];

どうもありがとう

4

5 に答える 5

6

月が省略されている場合は、この形式を試してください (Sept) :

[df setDateFormat:@"EEE, d MMM y HH:mm:ss Z"];;

[df setDateFormat:@"EEE, d MMMM y HH:mm:ss Z"];

月名が書かれている場合(9月)。

フォーマット指定子の完全なリスト。

ロケールも変更する必要がありました

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[df setDateFormat:@"EEE, d MMM y HH:mm:ss Z"];
NSDate *date = [df dateFromString:@"Mon, 28 May 2012 11:20:29 +0000"];

[df setDateFormat:@"dd/MM/yyyy"];
NSString *dateStr = [df stringFromDate:date];

NSLog(@"%@",dateStr);

出力

28/05/2012
于 2012-05-28T20:03:26.383 に答える
5

TwitterのJson応答の「created_at」属性は次の形式であることがわかりました。

Thu Apr 19 10:07:29 +0000 2012

だから私はこのフォーマッターを使用しました:

[df setDateFormat:@"EEE MMM d HH:mm:ss Z y"];

正常に動作しています;)

于 2013-01-09T15:52:49.290 に答える
3

使用している形式を検証するには、日付から文字列を作成します。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"eee, MMM dd HH:mm:ss ZZZZ yyyy"];
NSLog(@"%@", [df stringFromDate: [NSDate date]];

これを JSON 応答の日付と比較すると、形式がどこに間違っているかがわかります。


スイフト

let df = NSDateFormatter()
df.dateFormat = "eee, MMM dd HH:mm:ss ZZZZ yyyy"
let dateStr = df.stringFromDate(NSDate())
println("\(dateStr)")
于 2012-05-28T20:16:15.113 に答える
0
"created_at" = "Sat Apr 05 06:31:57 +0000 2014";

以下のメソッド リターン ツイットが発生するまでの時間。

-(NSString*)retrivePostTime:(NSString*)postDate{

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
   [df setDateFormat:@"eee MMM dd HH:mm:ss ZZZZ yyyy"];
    NSDate *userPostDate = [df dateFromString:postDate];


    NSDate *currentDate = [NSDate date];
    NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:userPostDate];

    NSTimeInterval theTimeInterval = distanceBetweenDates;

    // Get the system calendar
    NSCalendar *sysCalendar = [NSCalendar currentCalendar];

    // Create the NSDates
    NSDate *date1 = [[NSDate alloc] init];
    NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1];

    // Get conversion to months, days, hours, minutes
    unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

    NSString *returnDate;
    if ([conversionInfo month] > 0) {
        returnDate = [NSString stringWithFormat:@"%ldmth ago",(long)[conversionInfo month]];
    }else if ([conversionInfo day] > 0){
        returnDate = [NSString stringWithFormat:@"%ldd ago",(long)[conversionInfo day]];
    }else if ([conversionInfo hour]>0){
        returnDate = [NSString stringWithFormat:@"%ldh ago",(long)[conversionInfo hour]];
    }else if ([conversionInfo minute]>0){
        returnDate = [NSString stringWithFormat:@"%ldm ago",(long)[conversionInfo minute]];
    }else{
        returnDate = [NSString stringWithFormat:@"%lds ago",(long)[conversionInfo second]];
    }
    return returnDate;
}
于 2014-04-05T07:56:03.993 に答える
0

正しいフォーマッタ値は次のとおりです。

[df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"];

為に:

created_at":"Mon, 28 May 2012 11:20:29 +0000"
于 2012-05-28T20:45:35.353 に答える