1

私はこの奇妙な問題を解決するために数時間を費やしました。「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;

//作業を続行します

4

3 に答える 3

4

月の場合は、'MM' である必要があります。

次の行を変更します

[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];

[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];

編集 申し訳ありませんが、フォーマットは

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
于 2012-02-03T11:05:51.840 に答える
1

フォーマット文字列を確認してください。@"dd/MM/yyyy hh:mm:ss" が必要です。あなたが持っているものでは、分を月として扱っています。

于 2012-02-03T11:06:21.933 に答える
0

これを試して

        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"dd-MM-yyyy HH:mm:ss"];

        NSDate *date = [df dateFromString:@"12-12-2013 15:50:50"];

         NSLog(@"Converted Date-->%@",date);

        NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
        [dateComponents1 setDay:6];

        NSDate *afterSomeDays = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents1 toDate:date options:0];

        NSLog(@"afterfifteenDays: %@", afterSomeDays);
于 2013-12-27T11:56:38.897 に答える