2

数週間の作業の後、昨日ついにアプリケーションをリリースしました :-) 20 の iPhone が私のアプリケーションをダウンロードしましたが、問題が発生したのは 1 つだけです。問題のあるデバイスにアクセスできないため、デバッグする方法がまったくありません。

まず最初に、json を取得し (デバイス上でも適切にデコードされます)、次に日付を抽出します。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *date = [formatter dateFromString:[myData objectForKey:@"date"]];

この日付がいつだったのか知りたいので、次の関数を使用します。

[DateManager getDateFromNow:date];

このコードにつながる:

+ (NSString *) getDateFromNow: (NSDate*) aDate{
    NSDate *now = [[NSDate alloc] init];

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

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

    NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:aDate  toDate:now  options:0];

    int second =[conversionInfo second];
    int minute =[conversionInfo minute];
    int hour =[conversionInfo hour];
    int day =[conversionInfo day];

    if(day != 0){
        if(day == 1){
            return [NSString stringWithFormat:@"1 day ago"];
        }else{
            return [NSString stringWithFormat:@"%i days ago", day];
        }
    }else if(hour != 0){
        if(hour == 1){
            return [NSString stringWithFormat:@"1 hour ago"];
        }else{
            return [NSString stringWithFormat:@"%i hours ago", hour];
        }
    }else if(minute !=0){
        if(minute == 1){
            return [NSString stringWithFormat:@"1 minute ago"];
        }else{
            return [NSString stringWithFormat:@"%i minutes ago", minute];
        }
    }else{
        if(second == 1){
            return [NSString stringWithFormat:@"1 second ago"];
        }else{
            return [NSString stringWithFormat:@"%i seconds ago", second];
        }
    }

}

私の問題は、1 つのデバイスのみで日付が「4932 日前」として計算され、他のすべてのデバイスでは正常に機能していることです。日付は次のとおりです。date: "2014-07-04 13:38:01"

何が間違っている可能性があるかについての手がかりはありますか?

よろしくお願いします...

編集: 4932 日前は 2001 年の最初の 1 月でした。リンゴの基準日。

4

1 に答える 1

0

systemTimeZone問題はまたはだと思いますNSCalendar

日付文字列変換を行う場合は、NSCalendar を設定する必要があります。

NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
// set your NSDateFormatter with calendar.
formatter.calendar = sysCalendar;

それは役に立ち、もう1つ、サーバー側から常にUTC日付またはタイムスタンプを設定する必要があります。

ありがとう。多分それはあなたを助けるでしょう。

于 2014-07-04T13:17:03.250 に答える