Swift DateFormatter 在将字符串转换为日期时返回 nil

问题描述 投票:0回答:3

我正在尝试转换字符串:

2018-01-18 13:04:42 +0000

类似的事情

January, 18, 2018

使用

DateFormatter
但失败了。我尝试过其他问题(thisthisthis)。

这是我的简单代码,打印

nil

let str = "2018-01-18 13:04:42 +0000" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MMMM, dd, YYYY" 
dateFormatter.locale = Locale.current 
let mydate = dateFormatter.date(from: str) 
print(mydate)
swift nsdateformatter
3个回答
6
投票

您的

DateFormatter
期望原始字符串采用
January, 18, 2018
格式。您应该首先将其转换为
Date
,然后仅将其转换为另一种格式 之后

此外,在提及普通日历年时不应使用

YYYY
有关详细信息,请参阅此问题。

let str = "2018-01-18 13:04:42 +0000" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") 

guard let date = dateFormatter.date(from: str) else {
    return
}

let newDateFormatter = DateFormatter() 
newDateFormatter.dateFormat = "MMMM, dd, yyyy" 
let newStr = newDateFormatter.string(from: date)
print(newStr) /*January, 18, 2018*/

2
投票
仅当日期字符串的格式与

DateFormatter

 匹配时,
dateFormat
 才能将字符串转换为日期,但示例中并非如此。因此,它会正确响应 
nil
 回复。


0
投票
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"; dateFormatter.timeZone = TimeZone.current; dateFormatter.dateStyle = .none; dateFormatter.timeStyle = .none; let date = dateFormatter.date(from: "2023-08-03 00:00:00")
这个日期为零,为什么?

let dateFormatter = DateFormatter() dateFormatter.dateStyle = .none dateFormatter.timeStyle = .none dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.timeZone = TimeZone.current let date = dateFormatter.date(from: "2023-08-03 00:00:00")
这个日期是正确的

© www.soinside.com 2019 - 2024. All rights reserved.