類似しているように見える StackOverflow に関する多くの質問を見てきましたが、どれも役に立ちませんでした。
RSS フィードを解析していて、日付をデフォルトの形式ではなく「数時間前」の形式に変換したいと考えています。
else if ([elementName isEqual:@"pubDate"])
{
currentString = [[NSMutableString alloc] init];
NSLog(@"CURRENT STRING %@", currentString); // THIS IS RETURNING NULL IN LOGS
[self setPubTime:currentString]; // But this statement is correctly putting the following in the label in custom tableview cell
}
上記のコードの最後の行は、以下のように tableview のカスタム セルにラベルを配置しています。
上記の行は currentString のログで NULL を返しているため、この質問 ( iPhone: 日付文字列を相対タイム スタンプに変換する)の関数を使用して「時間前」形式に変換することはできません。
ログでcurrentStringが空であるのに、次のステートメントでラベルを設定できる理由と、それを数時間前の形式に変換する方法を教えてください。
ありがとう
アップデート:
Anupdas の回答により、問題の半分が解決されました。これで、NSLog とカスタム テーブルビュー セル内の pubTime ラベルの両方にタイムスタンプを示す currentString が表示されます。残っている唯一のことは、このタイムスタンプを使用して、それらを「時間/分/月など」の形式に変換することです。
以下を使用します。
if ([elementName isEqualToString:@"pubDate"]) {
NSLog(@"pubTime CURRENT IS %@", currentString);
// [self setPubTime:currentString];
NSString *myString = [self dateDiff:currentString];
[self setPubTime:myString];
}
上記のコードの後のログは次のとおりです。
何らかの理由で、次の機能が機能していません。
-(NSString *)dateDiff:(NSString *)origDate {
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setFormatterBehavior:NSDateFormatterBehavior10_4];
[df setDateFormat:@"EEE, dd MMM yy HH:mm:ss VVVV"];
NSDate *convertedDate = [df dateFromString:origDate];
[df release];
NSDate *todayDate = [NSDate date];
double ti = [convertedDate timeIntervalSinceDate:todayDate];
ti = ti * -1;
if(ti < 1) {
return @"never";
} else if (ti < 60) {
return @"less than a minute ago";
} else if (ti < 3600) {
int diff = round(ti / 60);
return [NSString stringWithFormat:@"%d minutes ago", diff];
} else if (ti < 86400) {
int diff = round(ti / 60 / 60);
return[NSString stringWithFormat:@"%d hours ago", diff];
} else if (ti < 2629743) {
int diff = round(ti / 60 / 60 / 24);
return[NSString stringWithFormat:@"%d days ago", diff];
} else {
return @"never";
}
}
currentString を「時間/分/日/などの形式」に変換するためのより良い解決策を誰かが教えてくれる場合は、親切に教えてください。ありがとう