1

私はこれに対してあまりにも長い間頭をぶつけてきました!文字列があります: 2012-09-27T18:00:00.000-04:00 フォーマットがあります: [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 文字列を変換すると null の結果が得られます。誰かが正しい日付形式を手伝ってくれますか?

4

1 に答える 1

5

NSDateFormatter のドキュメントによると:

フォーマット文字列は、Unicode Technical Standard #35 のフォーマット パターンを使用します。標準のバージョンは、オペレーティング システムのリリースによって異なります。

OS X v10.8 および iOS 6.0 のフォーマッターは [バージョン tr35-25] を使用します。

そのリンクに従ってください:

s 1..2 12 秒。ゼロ パディングには 1 つまたは 2 つ使用します。

つまり、sfor 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
于 2012-09-21T00:55:41.257 に答える