私はstackoverflowで多くのリンクに遭遇し、この形式2013-07-20T12:23:54.411 + 05:30のタイムスタンプをこの形式のNSDateに変換するコードを実装しようとしました
2013 年 7 月 20 日(火) 12:23:54 または 1 分前、2 日前形式。
次のコードを実装しました。toDate は nil です。つまり、date1 は nil 値を与えています。Xcode はこの問題について皮肉を言っているようです
つまり、nil toDate を使用した操作は何を意味すると思いますか? 今のところ例外は回避されています。これらのエラーのいくつかは、この苦情とともに報告される予定です。その後、さらに違反が発生すると、nil の結果として発生するランダムな処理が黙って実行されます。
誰かが私が間違っている場所を教えてもらえますか?
NSDateFormatter *dateForm = [[NSDateFormatter alloc] init];
[dateForm setDateFormat:@"yyyy-mm-ddTHH:mm:ssssZ"];
[dateForm setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[dateForm setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date1 = [dateForm dateFromString:string];
NSDate *date2 = [NSDate date];
unsigned int unitFlags = NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
// gets the difference between the current date and also the date and time in the timestamp of the data
NSDateComponents *diffComps = [cal components:unitFlags fromDate:date2 toDate:date1 options:0];
int year = ABS([diffComps year]);
int month = ABS([diffComps month]);
int day = ABS([diffComps day]);
int hour = ABS([diffComps hour]);
int minute = ABS([diffComps minute]);
int seconds = ABS([diffComps second]);
NSString *displayTime;
if (year == 0) {
if (month == 0) {
if (day == 0) {
if (hour == 0){
if (minute == 0) {
displayTime = [NSString stringWithFormat:@"about %d secs ago",seconds];
}
else {
displayTime = [NSString stringWithFormat:@"about %d mins ago",minute];
}
}
else {
displayTime = [NSString stringWithFormat:@"about %d hours ago",hour];
}
}
else {
displayTime = [NSString stringWithFormat:@"about %d days ago",day];
}
}
else {
displayTime = [NSString stringWithFormat:@"about %d months ago",month];
}
}
else {
displayTime = [NSString stringWithFormat:@"about %d years ago",year];
}
編集:これは、appdelegate で作成した文字列で正常に機能します。しかし、シングルトン クラスで作成した文字列ではありません。