私はこの奇妙な問題を解決するために数時間を費やしました。「dd/mm / yyyyhh:mm:ss」に日付形式があり、日付とNOWの秒数の違いを知りたいです。私は以下のようにそれをやっていますが、なぜそれが31日間違っているのかわかりませんか?ほんの数時間の違いです!誰かが私がここで間違っていることを私に助けてもらえますか?
NSString* datetime = @"03/02/2012 10:25:34"; // Today's date
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:datetime];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
出力:
2012-02-03 10:50:50.480 UniversalApp[13114:707] diff:2679916.480563 totaldays:31
次に、dateFromStringをNSDateに再度変換しようとしましたが、完全にランダムな日付が出力されることに驚きました。どうすればフォローできるかわかりませんか?それは私の元の日付に「日時」を与えるはずです!
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSString* str = [formatter stringFromDate:dateFromString];
NSLog(@"date:%@ to date:%@", datetime, str);
出力:
date:03/02/2012 10:25:34 to date:03/25/2012 10:25:34
[編集]
「dd/mm / yyyyhh:mm:ss」を「dd / MM / yyyyhh:mm:ss」に置き換えても機能しますが、それでも秒差は正しくありません。さまざまな日付については、次の出力を参照してください。
修正されたコード:
NSLog(@"For Date:%@",[res objectForKey:@"CommentDate"]);
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:[res objectForKey:@"CommentDate"]];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
出力:(多くの出力がNanであることに注意してください!!)
2012-02-03 11:30:23.198 UniversalApp [13207:707]日付:03/02/2012 10:25:34
2012-02-03 11:30:23.204 UniversalApp [13207:707]秒:3889.204166totaldays:0
2012-02-03 11:30:23.506 UniversalApp [13207:707]日付:02/02/2012 16:56:05
2012-02-03 11:30:23.512 UniversalApp [13207:707]秒:nantotaldays:0
2012-02-03 11:30:23.818 UniversalApp [13207:707]日付:02/02/2012 14:34:05
2012-02-03 11:30:23.827 UniversalApp [13207:707]秒:nantotaldays:0
2012-02-03 11:31:25.253 UniversalApp [13207:707] ToDate:02/02/2012 12:02:55
2012-02-03 11:31:25.255 UniversalApp [13207:707]秒:127710.255748合計日数:1
2012-02-03 11:32:06.424 UniversalApp [13207:707]日付:01/02/2012 11:01:20
2012-02-03 11:32:06.427 UniversalApp [13207:707]秒:174646.427676合計日数:2
2012-02-03 11:32:06.639 UniversalApp [13207:707]日付:31/01/2012 17:38:17
2012-02-03 11:32:06.643 UniversalApp [13207:707]秒:nantotaldays:0
[編集]
'hh'を'HH'に置き換えると、上記の問題が解決しました。
[編集]
私が遭遇した別の問題...おい!!
24時間制に設定すると、これは機能しません。これに基づいて、ユーザーの設定によって上書きされます。
この最後の問題に対する強力な解決策は見つかりませんでした。最後に、秒の「nan」値を確認することにしました。「nan」の場合は、元の日付文字列を使用し、秒や時間などに変換しないでください。
// Check for the 'nan', return if seconds='nan' invalid date format.
if(seconds != seconds)
return nil;
//作業を続行します