Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:如何将字符串(如5/3/17,10:16 AM)转换为日期对象_Swift_Date_Firebase - Fatal编程技术网

Swift:如何将字符串(如5/3/17,10:16 AM)转换为日期对象

Swift:如何将字符串(如5/3/17,10:16 AM)转换为日期对象,swift,date,firebase,Swift,Date,Firebase,所以我选择了一个当前日期,并将date.description(大约是5/3/17,10:16 AM)存储到我的firebase数据库中。从数据库检索数据时,我希望能够按该日期排序,因此我希望将其转换回日期对象。你是怎么做到的 我查看了以前的一些帖子,但它们要么是旧的(带有NSDate),要么就是不起作用。谢谢 for (key, value) in dictionary { print("\n\nKEY AND VALUE")

所以我选择了一个当前日期,并将date.description(大约是5/3/17,10:16 AM)存储到我的firebase数据库中。从数据库检索数据时,我希望能够按该日期排序,因此我希望将其转换回日期对象。你是怎么做到的

我查看了以前的一些帖子,但它们要么是旧的(带有NSDate),要么就是不起作用。谢谢

for (key, value) in dictionary {
                    print("\n\nKEY AND VALUE")
                    print(key)
                    print(value)
                    print("\n\n")
                    var date1: Date = Date()
                    var dateFormatter = DateFormatter()
                    dateFormatter.dateFormat = "dd/MM/yyyy"
                    date1 = dateFormatter.date(from: value)!
                    let temp = historyListItem(keyEntered: key, dateEntered: date1)
                    self.historyKeysAndDateArray.append(temp)
                    print(value)
                }
^它给了我一个错误:致命错误:在这一行展开可选值时意外发现nil:
date1=dateFormatter.date(from:value)


值是以下格式的字符串:5/2/17,下午3:15 但是,您的dateFormatter是:dateFormatter.dateFormat=“dd/MM/yyyy” dateFormat非常匹配,可以将该字符串转换为日期类型。
时间和am/pm在哪里?这里有一些问题。主要原因是字符串的日期格式错误。以下是一些其他清理的正确代码:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M/d/yy, h:mm a"
for (key, value) in dictionary {
    print("\n\nKEY AND VALUE")
    print(key)
    print(value)
    print("\n\n")
    if let date1 = dateFormatter.date(from: value) {
        let temp = historyListItem(keyEntered: key, dateEntered: date1)
        self.historyKeysAndDateArray.append(temp)
        print(value)
    }
}
不要强制展开选项。你的应用程序将崩溃


另外,在循环之前创建格式化程序。这将更加有效。

有无数的例子可以使用
DateFormatter
将日期字符串转换为
日期?我已经搜索了很多次,但没有一次成功用您尝试过的内容更新您的问题并清楚地解释您的问题。好的,更新您是否真的相信字符串
5/2/17,3:15 PM
与格式
dd/MM/yyyy
匹配?你需要精确匹配字符串的格式。我以为这就是它将被转换成的格式,我是个白痴。我也这么想。日期/时间格式可能变化很大。你一定很具体,谢谢!但是,如果日期是像2017年12月23日那样的话会怎么样?这将是两个额外的字符,对吗?当解析时,
M/d/yy
MM/dd/yy
将适用于该格式。将字符串解析为
日期
比将
日期
转换为字符串更轻松。这两种格式将根据日期和月份的值给出不同的结果字符串。但这不适用于你原来的问题。在操场上玩不同的日期、字符串和格式,看看你能得到什么。你会学到很多。好的,谢谢你!这很有帮助。还有,很抱歉叫你居高临下,很明显你只是想帮忙。回顾我之前的评论,我可以看出我本可以用更好的措辞。