在swift 3中将字符串转换为日期类型[重复]
Posted
技术标签:
【中文标题】在swift 3中将字符串转换为日期类型[重复]【英文标题】:Convert string to DATE type in swift 3 [duplicate] 【发布时间】:2017-01-03 03:06:44 【问题描述】:我有这个结构:
struct message
var id: String = "0"
var text: String = ""
var date: Date!
var status: String = ""
我必须从 dbase 加载这个结构,它以String
格式导出,也以date
格式导出。
所以我写了这段代码来将String
转换为Date
类型:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
let dataDate = dateFormatter.date(from: elemMessage["date"] as! String)!
我将它加载到结构中:
message(id: elemMessage["id"] as! String, text: elemMessage["text"] as! String, date: dataDate as! Date, status: elemMessage["status"] as! String)
但我有这个警告:“从Date
转换为不相关的类型Date
总是失败”
因此,如果我运行应用程序,它将失败。
我该如何解决这个问题,结构中的 date
var 必须是 Date
类型。
谢谢。
【问题讨论】:
与问题无关,但是:您确定消息的空文本或状态有意义吗?似乎是一个非常不合理的默认值 您显示的代码导致的错误与您的不同:错误:参数标签不正确。 (data:
必须是 date:
?)请显示与导致问题的代码完全相同的代码。您还最好展示elemMessage
是如何声明的。这不是一个关键问题,但您最好使用 UpperCamelCase 作为类型名称。
抱歉参数标签是date:
复制错误。 elemMessage
是来自 dbase 的 json 解析,它可以工作。我在date
上有错误
Swift 是一种类型推断语言。 var id = "0"
你怎么知道你的日期是UTC?这种格式对我来说就像当地时间。如果是 UTC,那里会有一个 Z 或 +0000
【参考方案1】:
您可以将字符串 Date 转换为 Date/NSDate,如下代码所示:-
Swift 3.2 & Swift 4.2
字符串到日期
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy" //Your date format
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00") //Current time zone
//according to date format your date string
guard let date = dateFormatter.date(from: "01-01-2017") else
fatalError()
print(date) //Convert String to Date
日期转字符串
dateFormatter.dateFormat = "MMM d, yyyy" //Your New Date format as per requirement change it own
let newDate = dateFormatter.string(from: date) //pass Date here
print(newDate) //New formatted Date string
输出:-
2017-01-11 00:07:00 +0000
Jan 11, 2017
【讨论】:
我使用了您的代码,但出现错误:` 无法转换类型为“日期”的值?到预期的参数类型“日期!” ` 当在结构消息中加载它时。 注意您必须在 ios 中缓存日期格式化程序:***.com/a/42370648/294884 @Andand Nimje : 你有没有注意到,转换后一天递减mm
不应该大写吗?
不工作 ....转换为日期后日期不正确【参考方案2】:
Swift 4 ISO
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone.autoupdatingCurrent
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
【讨论】:
【参考方案3】: func getDateFromString(dateStr: String) -> (date: Date?,conversion: Bool)
let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
let dateComponentArray = dateStr.components(separatedBy: "/")
if dateComponentArray.count == 3
var components = DateComponents()
components.year = Int(dateComponentArray[2])
components.month = Int(dateComponentArray[1])
components.day = Int(dateComponentArray[0])
components.timeZone = TimeZone(abbreviation: "GMT+0:00")
guard let date = calendar.date(from: components) else
return (nil , false)
return (date,true)
else
return (nil,false)
//输入:“23/02/2017”
//输出:(2017-02-23 18:30:00 +0000, true)
【讨论】:
不安全的代码以及为什么在 Swift 类中使用 NS 类(NSCalendar、NSDateComponents)? 感谢您的指出。请检查一下。以上是关于在swift 3中将字符串转换为日期类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift(ios)中将字符串格式的日期转换为另一种字符串格式[重复]