在 Swift 中将字符串转换为日期 [重复]
Posted
技术标签:
【中文标题】在 Swift 中将字符串转换为日期 [重复]【英文标题】:Converting a String to a Date in Swift [duplicate] 【发布时间】:2017-07-30 10:55:16 【问题描述】:我在字符串中有日期,下面的代码格式要更改为Date
但我收到nil
let addedDate = "Tue, 25 May 2010 12:53:58 +0000"
let formatter = DateFormatter()
formatter.dateFormat = "dd MM YYYY"
let date1 = formatter.date(from: addedDate)
print("DATE \(date1)")
【问题讨论】:
您是否注意到dateFormat
与addedDate
的格式完全不匹配?
如果我知道那件事为什么我会在这里问..
【参考方案1】:
日期格式需要是您尝试转换的字符串,而不是您想要返回的格式
所以
formatter.dateFormat = "dd MM YYYY"
应该是
formatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
【讨论】:
如果您想以该格式显示日期,您需要设置另一个格式化程序 - 查看***.com/a/42231620/285190 您还必须将语言环境设置为英语。【参考方案2】:您必须将您的字符串 (addedDateString) 转换为日期吗? (addDate) 然后您可以使用您想要的格式将其转换为字符串 (dateString)。请注意:从 String 到 Date 的转换失败时 addedDate 为 nil。
import UIKit
let addedDateString = "Tue, 25 May 2010 12:53:58 +0000"
// Transform addedDateString to Date
let addedDateFormatter = DateFormatter()
addedDateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
if let addedDate = addedDateFormatter.date(from: addedDateString)
// Converstion String to Date return a valid Date
print ("addedDate", addedDate)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MM YYYY"
let dateString = dateFormatter.string(from: addedDate)
print("Date: ", dateString)
else
// addedDate == nil value when conversion String to Date failed
print ("addedDateString not valid")
你也可以做一个函数。像这样的:
func transformStringDate(_ dateString: String,
fromDateFormat: String,
toDateFormat: String) -> String?
let initalFormatter = DateFormatter()
initalFormatter.dateFormat = fromDateFormat
guard let initialDate = initalFormatter.date(from: dateString) else
print ("Error in dateString or in fromDateFormat")
return nil
let resultFormatter = DateFormatter()
resultFormatter.dateFormat = toDateFormat
return resultFormatter.string(from: initialDate)
print (transformStringDate("Tue, 25 May 2010 12:53:58 +0000",
fromDateFormat: "E, d MMM yyyy HH:mm:ss Z",
toDateFormat: "dd MM YYYY") ?? "Error")
【讨论】:
以上是关于在 Swift 中将字符串转换为日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章