2016-03-18 14 views
-1

私はこの日付形式 "2016-03-16"のNSStringを持っていますが、次のコードを追加して同じ日付を適切なNSDate形式で返しますが、 "2016-03-15 18:30:00 +0000"を返します。どうすればNSDateで同じ "2016-03-16"を取得できますか?NSDateFormatterでiosの日付が間違っていますか?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    dateFormatter.dateFormat = @"yyyy-MM-dd"; 
    NSString *datePart = [dateFormatter stringFromDate:dateFromString];//2016-03-16 

    NSDate *dateValue = [dateFormatter dateFromString:datePart]; 
    NSLog(@"%@----",dateValue); //" 2016-03-15 18:30:00 +0000 
+1

NSDateは、ほとんどの人が日付と時刻を参照するEXACT日付を表します。 3月16日は日付と時刻の正確な記述ではありません。システムは、デバイスの3/16の午前12時を意味する数値を仮定し、その日時をGMTで返します。コードの問題を解決する前に、アプリに必要な時間を正確に理解してください。 – danh

+0

http://stackoverflow.com/questions/17294289/unexpected-value-from-nsdate/17296378#17296378 –

答えて

5

NSDateインスタンスから文字列値を取得する必要があります:30。あなたは時刻を指定するのではなく、日付を指定しているので、時刻は真夜中を意味します。現地時間帯の16日の深夜はUTC時刻の前日(15日)18:30になります。このため、「2016-03-15 18:30:00 +0000」と表示されます

ログオンするとNSLog(@"%@----",dateValue)の日付は、実際には[dateValue description]を呼び出しています。これは、UTCを使用して日付を表示します。

NSLog(@"%@----",[dateValue descriptionWithCalendarFormat:nil timeZone:[NSTimeZone localTimeZone] locale:nil])を使用すると、現在のタイムゾーンで日付が表示されます。

descriptionのメソッドやdescriptionWithCalendarFormatメソッドなどの関連メソッドは、デバッグのためだけのものですが、NSDateFormatterを使用して日付を文字列に変換する必要があります。 iOS_Binodの回答は、これを行う方法の1つを示しています。

+1

完全で、明確で、わずかに意味のない、または人種差別さえない。 +1 – danh

2

デフォルトでは、日付フォーマッタはローカルタイムゾーンを使用します。 -[NSDate description]メソッド(これは%@と呼ばれます)はUTCを使用します。これが文字列が異なる理由です。

+0

私は何も理解していません – Bangalore

+1

次に読んで学びます。主に、学ぶ。 Google for UTCあなたはGMTのためにgoogleを使うかもしれませんが、それはほぼUTCと同じではありません。あなたは世界が大きくて丸いことを知っていて、タイムゾーンを持っていますか? – gnasher729

3

NSDateインスタンスをコンソールに印刷しようとしました。それがあなたのコードがコンソールでデフォルトのフォーマット値を表示する理由です。

あなたがあなたのローカルタイムゾーンはおそらくUTC + 5である。この方法の助けを借り[your_dateformater stringFromDate:dateInstance]

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd"; 
NSString *datePart = @"2016-03-16"; 
NSDate *dateValue = [dateFormatter dateFromString:datePart]; 
NSLog(@"string convert into Date is - %@",[dateFormatter stringFromDate:dateValue]); 
関連する問題