2017-12-06 23 views
0

文字列の10/24 12:00 PMのような形式を日付形式の同等のものに変換しています。私は次のコードを使用しています:不正な文字列から日付への変換swift 3.0

let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "MM/dd hh:mm aa" 

    self.dateCompleted = dateFormatter.date(from: self.DeliverBy!) 

dateCompletedは、date変数ですが、self.DeliveryByはString変数です。

私は2017-10-24 12:00:00 UTCのようなものでなければならないので、2000-10-24 17:00:00 UTCのような出力を得ています。何か間違っているのですか?私はhttp://userguide.icu-project.org/formatparse/datetime

+1

は 'DateFormatter'は、ローカルタイムを前提としています。したがって、あなたがEST(UTC -5)に住んでいると仮定すると、17:00:00 UTCを見ても理にかなっています。 – rmaddy

答えて

2

を呼ば

あなたの日付文字列は、そのためデフォルトの日付から決定 である、が指定されていません。

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MM/dd hh:mm aa" 
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date()) 
if let dateCompleted = dateFormatter.date(from: "10/24 12:00 PM") { 
    print(dateCompleted) // 2017-10-24 10:00:00 +0000 
} 

は(私はそれゆえ12:00 PMが 10として印刷され、ヨーロッパ/ベルリンのタイムゾーンで午前:あなたは何ができるかは、現在の日付(開始)に デフォルトの日付を設定することです: 00 GMT)あなたがたDateFormatterに現在の日付情報を読み込むことができ

+0

2017-10-24 17:00:00 +0000まだタイムスタンプが間違っています – Ackman

+0

@Ackman:日付にはタイムゾーンがなく、常にGMTで表示されます。あなたのタイムゾーンの "12:00 PM"はGMTタイムゾーンの17:00なので、結果は正しいです。 https://stackoverflow.com/questions/39937019/nsdate-or-date-shows-the-wrong-timeも参照してください。 –

0

:そう言われない限り

let dateFormatter = DateFormatter() 

dateFormatter.dateFormat = "MM/dd hh:mm aa" 

dateFormatter.defaultDate = Date() // start with the current date 

self.dateCompleted = dateFormatter.date(from: self.DeliverBy!) 
+0

10/24 12:00 PM -----> Deliveryby 2017-10-24 17:00:56 +0000 -----> dateCompletedなぜ時差がありますか? – Ackman

関連する問題