16

コード :

let dateString = "2016-04-02"
    var formatter: NSDateFormatter = NSDateFormatter()
    formatter.timeZone = NSTimeZone(abbreviation: "GMT +3:00")
    formatter.dateFormat = "yyyy-MM-dd"
    println("dateString: \(dateString)")
    formatter.locale =  NSLocale(localeIdentifier: "en_US_POSIX")
    let date = formatter.dateFromString(dateString)
    println("date: \(date)")

    formatter.dateFormat = "yyyy-MM-dd"
    let formattedDateString = formatter.stringFromDate(date!)
    println("formattedDateString: \(formattedDateString)")

出力:

dateString: 2016-04-02
date: Optional(2016-04-01 21:00:00 +0000)
formattedDateString: 2016-04-02
2016-04-01 21:00:00 +0000

文字列を NSDate データ型に変換しようとしていますが、正しい値が得られません。多くの解決策を試しましたが、正しい値が返されません。入力「2016-04-02」と同じyyyy-MM-dd形式(2016-04-02)で必要です。誰かが助けることができれば、本当に感謝されます。前もって感謝します

4

4 に答える 4

18

私は同じ問題を抱えていましたが、これは私にとってはうまくいきました

タイムゾーンを設定する必要があります

formatter.timeZone = NSTimeZone(abbreviation: "GMT+0:00")
于 2015-04-02T09:40:29.330 に答える
6

あなたのデートは完璧です。:-) しゃれは意図されていません。

@HoaParis が回答した内容について詳しく説明します。

まず第一に、NSDate は瞬間を表します。指定された場所の日時の値ではありません。したがって、グリニッジの真夜中を表す NSDate は、インドでは朝の 5:30 になります。

今あなたの質問に来ます。時刻なしで日付形式を指定すると、フォーマッターはそれを真夜中と見なします。また、タイムゾーンが指定されていない場合は、現在のタイムゾーンが使用されます。

したがって、'2016-04-02' は、あなたのタイムゾーンでは '2016-04-02, 00:00:00' を表します。あなたのタイムゾーンは GMT+3 です。つまり、あなたの場所で午前 0 時であっても、グリニッジ、つまり英国では前日の 21:00:00 時間です。

説明したように、NSDate は同じ NSDate オブジェクトがこれら 2 つの一見異なる時間を表す瞬間ですが、実際には同じ瞬間です。

デフォルトで日付を印刷すると、タイムゾーンではなく GMT に関する日付が印刷されます。つまり、2016-04-01, 21:00:00 です。フォーマッタはタイムゾーンを考慮して「2016-04-02」にします

于 2015-04-02T09:42:07.800 に答える