0

これは、日付形式を変更するために使用しているコードです

      NSLog(@"newBirthDates%@",_newwBirthDates);
    NSDateFormatter *Form = [[NSDateFormatter alloc] init];
    [Form setDateFormat:@"MM/dd"];
    NSDate *date1 =[NSDate date];
    NSString *string =[Form stringFromDate:date1];
     NSLog(@"string%@",string);
    NSDate *todaydate =[Form dateFromString:string];
     NSLog(@"todaydate%@",todaydate);

これは私が出力として得るものです

     newBirthDates(
    "05/22",
    "07/11",
    "10/07",
    "02/20"
)
 newBirthDates(
    "05/22",
    "07/11",
    "10/07",
    "02/20"
)
 string03/18
 todaydate1970-03-17 18:30:00 +0000

私の質問は、なぜ 3/18 が 03/17 になるのか?? なぜ1日が減少するのか

4

4 に答える 4

4

答えは簡単です - タイムゾーンです。NSLog印刷されたものをよく見てください
1970-03-17 18:30:00 +0000

デフォルトでは、aNSDateFormatterはローカル タイムゾーンに設定されています。つまり、タイムゾーンが+5:30日付「1970/18/3」を与えている場合、1970-03-18 00:00:00 +0530. ただし、NSLog常に GMT (ゼロ) タイム ゾーンで日付を出力し、タイム ゾーンの差 (5 時間 30 分) を加算/減算します。

NSLog基本的に、修正する必要はありません。値を確認するために使用する場合は、どのように機能するかを理解する必要がありNSDateます。

于 2013-03-18T13:10:55.590 に答える
1

ログは文字列値ごとに表示され、すべての重要なタイムゾーンの違いが排除されています。

Log ofNSDateは、GMT からの時間を表示します。

そして、両方の値が正しいです。

NSDate の唯一のプリミティブ メソッドである timeIntervalSinceReferenceDate は、NSDate インターフェイスの他のすべてのメソッドの基礎を提供します。このメソッドは、絶対基準日 (GMT 2001 年 1 月 1 日の最初の時点) を基準とした時間値を返します。

NSDate のドキュメントを読む必要があります。

于 2013-03-18T13:06:19.373 に答える
1

正しい日付を取得するには、これを使用できます。

 NSDateFormatter *Form = [[NSDateFormatter alloc] init];
    [Form setDateFormat:@"MM/dd"];
    [Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *date1 =[NSDate date];
    NSString *string =[Form stringFromDate:date1];
    NSLog(@"string%@",string);
    NSDate *todaydate =[Form dateFromString:string];
    NSLog(@"todaydate%@",todaydate);

上記のコードは正しい日付を提供します。

于 2013-03-18T13:10:08.530 に答える
1

主なものはTimeZoneです:[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

これは正しいコードです:

NSDateFormatter *Form = [[NSDateFormatter alloc] init];
[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[Form setDateFormat:@"MM/dd"];
NSDate *date =[NSDate date];
NSString *string =[Form stringFromDate:date];
NSDate *todaydate = [Form dateFromString:string];
NSLog(@"todaydate %@",todaydate);
于 2013-03-18T13:11:12.097 に答える