2016-08-28 8 views
0

このサーバーの日付(kinvey要求から)をローカルタイムゾーンに変換する必要があります。Z形式のサーバー日付をローカルのnsdateに変換する

私は、次のコードを使用しています:

ECT = "2016-08-28T16:30:06.553Z" または LMT = "

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-ddTHH:mm:ss.sTZD" 
print(dateFormatter.dateFromString(newValue)) 

日付形式はこれです2016-08-28T16:30:06.553Z "

私が日付を印刷すると、それは何も間違っていますか?私はあなたが説明したフォーマット記号を使用することができ、あなたのアプリが唯一iOS7 +をターゲットにすることができた場合、それはDATEFORMATの終わり

+0

日付文字列は単純なUTC日付であるようですが、あなたは単にそれを 'NSDate'として解析しようとしているようです。タイトルの中でECTやLMTはどういう意味ですか? – OOPer

+0

あなたの権利は単純なutcの日付です、問題は私がパースすることはできませんそれはnsdateに私はちょうど多くの議員としようとしていますがどちらも動作しません! –

答えて

3

ことができると思います:

Fixed Formats (in Data Formatting Guide)

Unicodeの技術標準#35 version tr35-31

秒| S | 1..n | 3456 | Fractional Second - 文字の数に(他の の時間フィールドのように)切り捨てます。 (例は 秒値12.34567のパターンSSSSを使用して表示します)

ゾーン| X | 1 | -08、+ 0530、Z | 時間フィールドとオプションの分フィールドを含むISO8601の基本形式。ローカル時間オフセットとき ISO8601 UTCインジケータ "Z" が使用される(X、プラス "Z" として 同じ。)は0である

したがって、小数秒を解析するために、大文字の 'S' を使用し、

と 'Z'を含むタイムゾーンの 'X'(UTC)です。

はこれを試してみてください:

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX" 

(それが将来的には、シンボルをフォーマットする別の時間として使用することができるように私は 'T' をエスケープ。)


PS。 "Z"をUTC + 0000と解釈する日付形式を記述するスレッドは見つかりませんでしたが、一部の条件が満たされていれば、それを無視または削除することは悪い解決策ではないかもしれません。あなたの最高の解決策を見つけてください。

+0

ありがとう、ついにそれが動作します。また、別の解決策を実装しました** ** date **から最後の5文字を​​削除し、それを解析して新しい**部分文字列**を作成しますが、あなたの答えが最良の解決策だと思います。 –

+0

なぜZをXに置き換えるのですか?しかし、これは – ShivaPrasad

+0

@ShivaPrasadで説明できますか?[リンクされた記事](http://www.unicode.org/reports/tr35/tr35-31/tr35- dates.html#Date_Format_Patterns)。単純に言うと、シンボル 'Z'のフォーマットは、**' + hh:mm' **(と他のもの)のような日付オフセットに一致しますが、** 'Z' **とは一致しません。しかし、シンボル「X」をフォーマットすると、** '+ hh:mm' **と**' Z' **の両方に一致します。 – OOPer

関連する問題