私はこれに対してあまりにも長い間頭をぶつけてきました!文字列があります: 2012-09-27T18:00:00.000-04:00 フォーマットがあります: [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 文字列を変換すると null の結果が得られます。誰かが正しい日付形式を手伝ってくれますか?
1 に答える
NSDateFormatter のドキュメントによると:
フォーマット文字列は、Unicode Technical Standard #35 のフォーマット パターンを使用します。標準のバージョンは、オペレーティング システムのリリースによって異なります。
OS X v10.8 および iOS 6.0 のフォーマッターは [バージョン tr35-25] を使用します。
そのリンクに従ってください:
s 1..2 12 秒。ゼロ パディングには 1 つまたは 2 つ使用します。
つまり、s
for seconds は整数部分のみを意味します。
しかし、そのすぐ下には、次のようなものがあります。
S 1..n 3456 分数秒 - (他の時間フィールドと同様に) 文字数に切り捨てます。(例は、秒値 12.34567 にパターン SSSS を使用した表示を示しています)
次に、タイムゾーンを一致させていない理由は、を引用しているためです。したがって、タイムゾーン形式ではなくZ
リテラルに一致します。Z
表示されている ISO8601 タイムゾーン形式に一致させるために、同じドキュメントには ZZZZZ が必要であると記載されています。
したがって、少なくとも 10.8/iOS 6 の場合は次のようになります。
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ"]
以前のバージョンでは、ドキュメントへのリンクがあります。あなたは今それを理解できるはずです。
これをテストします (Python で、数行のコードを節約するため):
>>> import Cocoa
>>> df = Cocoa.NSDateFormatter.alloc().init()
>>> df.setDateFormat_("yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ")
>>> print df.dateFromString_(2012-09-27T18:00:00.000-04:00')
2012-09-27 22:00:00 +0000