こんにちは辞書があります
self.publishedAt = dictionary["publishedAt"] as? NSString
私は日付を取得しています "2017-01-27T18:36:36Z"。読み取り可能な形式に変換したい:dd-MM-yyyy hh:mm:ss。経由してみた
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm:ss"
let date = dateFormatter.date(from: (self.publishedAt as? String)!)
print("EXACT_DATE : \(date)")
しかし、ゼロになる。 :(
簡単な形式で日付を取得する正しい方法は何ですか?
ISO8601文字列を日付に変換する入力形式と、日付を文字列に戻す出力形式が必要です。
let string = "2017-01-27T18:36:36Z"
let dateFormatter = DateFormatter()
let tempLocale = dateFormatter.locale // save locale temporarily
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = dateFormatter.date(from: string)!
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.locale = tempLocale // reset the locale
let dateString = dateFormatter.string(from: date)
print("EXACT_DATE : \(dateString)")
文字列をDate
オブジェクトに変換するには:
let string = "2017-01-27T18:36:36Z"
let isoFormatter = ISO8601DateFormatter()
let date = isoFormatter.date(from: string)!
または、以前のiOSバージョンをサポートする必要がある場合 ISO8601DateFormatter
:
let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
isoFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = isoFormatter.date(from: string)!
(ISO 8601日付フォーマッタにlocale
を設定した理由を理解するには、 Apple Technical Q&A 148 を参照してください。)
次に、それをユーザーフレンドリな日付形式に変換するには、別のフォーマッターを使用します(または上記の2番目の例を使用すると、フォーマッターを再使用できますが、locale
を忘れずにリセットしてくださいLocale.current
):
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let result = formatter.string(from:date)
注:dateFormat
文字列ではなく、日付をユーザーに返すときにこれらのスタイルパラメーターを使用することをお勧めします。したがって、24時間制が必要かどうかを想定するのではなく、ロケールに適したスタイルを使用すること、および/またはdd-MM-yyyy
vs MM-dd-yyyy
形式を使用するかどうか。
日付フォーマッターの形式の変更(たとえば、dateFormat
文字列の変更)は比較的高価なプロセスであるため、複数の日付に対してこのプロセスを実行する場合、単一のDateFormatter
とdateFormat
またはスタイルを絶えず繰り返し変更します(さらに悪いことに、日付ごとに新しいフォーマッターをインスタンス化します)。代わりに、日付形式スタイルごとに1つのフォーマッタを作成し、可能な限り文法を再利用します。