2017-11-24 7 views
-3

私は変換しようとしている有効なDate()オブジェクトを持っています。私は他のSOの投稿を見てきましたが、私のコードでそれをやるべきだと思われます:有効なSwift 4 Dateオブジェクトが "HH:mm"にフォーマットされたときに "00:00"を返します

private func getHoursMinutesString(date:Date) -> String 
{ 
    let formatter = Foundation.DateFormatter() 
    formatter.dateFormat = "HH:mm" 
    return formatter.string(from: date) 
} 

しかし、返される時間は常に "00:00"です。新しいDate()オブジェクトを入れると、正しい時刻が返されます。私はあなたが見ることができたDate()オブジェクトに何が間違っているのだろうかと思います。ここでは、データのlldbプリントアウトです:

date formatter issue

あなたが見ることができるように、フォーマッタが有効なオブジェクトです。日付(私は思う)は有効な日付オブジェクトです。フォーマッタを通過すると "00:00"になりますが、新しいDate()オブジェクトで正常に動作します。

dateオブジェクトに不適切な形式または不足が目立つものはありますか?それとも、私のフォーマッタに足りない一歩がありますか?

更新調査を行った後、タイムゾーンを設定すると問題が解決されます。なぜ、私は知らない!

+0

あなたの出力を使用して、UTCから5時間を生きると仮定が正しいです。 'date'は現地時間の深夜です。 – rmaddy

+0

Hmm ah ok。私は05:00を見ていたので変わったようでした。私はタイムスタンプから05:00を得ることを期待していました。 – Aggressor

+1

午前5時です(+0000はUTCを意味します)。デフォルトでは、DateFormatterには現地時間での値が表示されます。 – rmaddy

答えて

0

は、これを追加してみてください:

dateFormatter.timeZone = NSTimeZone(name: "UTC") 
+0

これは必要ありません。 – rmaddy

+2

これを行うには(たとえば、内部ストレージ用の文字列を作成し、GMT/UTC/Zuluを使用したい場合など)、 'NSTimeZone'ではなく' TimeZone'を使用します。例えば。 'formatter.timeZone = TimeZone(secondsFromGMT:0)'です。 – Rob