在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)中将字符串格式的日期转换为另一种字符串格式[重复]

如何在 Swift 3 中将 HTML 文本转换为属性字符串而不丢失换行符 [重复]

无法在 Swift 中将日期转换为特定格式

如何在python中将字符串转换为日期时间[重复]

如何在c#中将字符串转换为日期[重复]

如何在 C# 中将字符串转换为日期时间 [重复]