[英]String to date conversion sometimes returns nil with DateFormatter
[英]Dateformatter returns nil date
我正在嘗試從服務器取回日期增加3個小時。 publication.DateTime
是一個字符串,在進行操作之前,我需要先將其轉換為日期。
這是我的嘗試:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from:(publication.DateTime)!) //date is nil here
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour], from: date!)
let finalDate = calendar.date(from:components)
let newDate = calendar.date(
byAdding: .hour,
value: 3,
to: finalDate!)
我究竟做錯了什么? 我試圖在線研究此問題,似乎大多數帖子都來自舊版本的Swift,所以也許新的Swift中有些東西我丟失或做錯了嗎?
編輯:更改日期格式的工作,但字符串onbject中的時間增加了3個小時,現在的時間看起來像15:0:0而不是之前的12:34:17。 我希望是15:34:17。
您只需要將yyyy-MM-dd'T'HH:mm:ssZ
更改為"yyyy-MM-dd'T'HH:mm:ss"
。
添加3個小時后,您的日期沒有得到分鍾和秒數的原因是您沒有在元件數組中包含這些元件,請參考以下代碼:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from:(publication.DateTime)!)
let calendar = Calendar.current
// Here .minute and .second is added in below line which is missing in your code
let components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date!)
let finalDate = calendar.date(from:components)
let newDate = calendar.date(
byAdding: .hour,
value: 3,
to: finalDate!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.