2016-08-12 9 views
-2

これは多くの時間を要していますが、私が試したすべての解決策は、私が望むものではないNSDateにフォーマットを変更したことが分かります。だから私はNSString2016-08-15T00:00:01.000Z NSDateに変換する必要があると言うです。私は、次のコードを試してみました:フォーマットを変更せずにNSStringをNSDateに変換する

NSString *newDate = @"2016-08-15T00:00:01.000Z" 

     NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; 
     [dateFormater setDateStyle:kCFDateFormatterNoStyle]; 
     [dateFormater setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
     NSDate *dateFromString = [[NSDate alloc] init]; 
     dateFromString = [dateFormater dateFromString:newDate]; 

をしかし、それは私が欲しいものではありませんどの2016-08-18 18:30:00 +0000にフォーマットを変更しました。誰かが私に助けてくれますか、事前に感謝します。

+0

NSDateにはフォーマットがありません!その常に同じです。 'format'という単語は日付の文字列バージョンに適用されます。 – Nishant

+0

それはできないと言っているのですか? – TKutal

+0

日付は正しいと思われますが、 'Z'の回りに一重引用符を削除してください。ところで、カスタム日付書式設定を使用すると、スタイルは無効になります。 'NSDate'インスタンスの' NSLog'がUTCタイムゾーンで日付を表示することを考慮してください。 – vadian

答えて

0

しかし、それは

2016-08-18 18:30:00 +0000

にフォーマットを変更し NSDateintまたは double形式を持っていないのと同じ方法で、フォーマットを持っていません。内部的には、 NSDateは、 の参照日付からの秒数で表されます。

「フォーマット」について話すときには、テキスト表現について話しています。同じ値には、異なるテキスト表現を使用できます。たとえば、「3」、「3」、「III」は数字3のすべてのテキスト表現です。数字にはフォーマットはありませんが、さまざまな方法で表現(フォーマット)できます。あなたのコードにこれらの3行を追加し

試してみてください。

NSString *stringFromDate1 = [dateFormater stringFromDate:dateFromString]; 
NSString *stringFromDate2 = [dateFromString description]; 
NSLog(@"%@ | %@ | %@", dateFromString, stringFromDate1, stringFromDate2); 

出力は何ですか? stringFromDate1は元の形式で表された日付の値ですが、stringFromDate2はの方法で生成された形式です。日付は同じで、形式が異なります。上記のコードを実行すると、NSLogに文字列以外のオブジェクトが渡された場合は、descriptionメソッドが呼び出され、そのテキスト表現が出力されます。

うまくいけば、それはすべて理にかなっています。

TL; DR:非文字列データ型は、書式を持たず、テキスト表現と変換することができます。

+0

事を説明する時間を与えてくれてありがとう、ちょっと質問を投票して移動してくれてありがとう。 – TKutal