将日期字符串转换为所需的日期格式,输出为零
Converting date string to desired date format and the output is nil
我正在尝试以下列格式将日期显示到 tableview 单元格中
1996.July.10 12:08 PM
使用此模式 yyyy.MMMM.dd hh:mm aaa
我 api 的实际日期格式是这种格式 2019-12-16T05:33:43Z
这是我用来转换的代码
if let dateString: String = articleListVM.articles[indexPath.row].publishedAt {
print(dateString)
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy.MMMM.dd hh:mm aaa"
let date = dateFormatter.date(from: dateString)
print("date: \(String(describing: date))")
}
现在我得到如下输出
2019-12-16T05:33:43Z
date: nil
我不确定我犯了什么错误,我得到的结果为零,请调查一下。
您指定的日期格式有一个小问题。您的日期格式实际上应该是:
yyyy-MM-dd'T'HH:mm:ssZ
因此,将您的代码更改为:
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
输出:
date: Optional(2019-12-16 05:33:43 +0000)
在评论中根据 OP 提供的更多信息进行编辑
为了将一种格式的字符串转换为日期,然后再转换为另一种日期格式,您需要两个 DateFormatter
。下面将原始字符串日期转换,然后将日期输出为另一种格式:
let dateString: String = "2019-12-16T05:33:43Z"
print(dateString)
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
if let date = dateFormatter.date(from: dateString)
{
print("date: \(String(describing: date))")
let outputFormatter = DateFormatter()
outputFormatter.locale = Locale(identifier: "en_US_POSIX")
outputFormatter.dateFormat = "yyyy.MMMM.dd hh:mm aaa"
let outputDate = outputFormatter.string(from: date)
print("date: \(String(describing: outputDate))")
}
输出:
2019-12-16T05:33:43Z
date: 2019-12-16 05:33:43 +0000
date: 2019.December.16 05:33 AM
请检查以下解决方案,我已经测试它工作正常
let inputdateString: String = "2019-12-16T05:33:43Z"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-mm-dd'T'hh:mm:ssZ"
let inputDate = dateFormatter.date(from: inputdateString )!
print("Input date: \(String(describing: inputDate))")
//Converting to Display Date, you can reuse same date formater
dateFormatter.dateFormat = "yyyy.MMMM.dd hh:mm a"
let displayDate = dateFormatter.string(from: inputDate)
print("display date: \(String(describing: displayDate))")
输出:-
Input date: 2019-01-16 05:33:43 +0000
display date: 2019.January.16 11:03 AM
我正在尝试以下列格式将日期显示到 tableview 单元格中
1996.July.10 12:08 PM
使用此模式 yyyy.MMMM.dd hh:mm aaa
我 api 的实际日期格式是这种格式 2019-12-16T05:33:43Z
这是我用来转换的代码
if let dateString: String = articleListVM.articles[indexPath.row].publishedAt {
print(dateString)
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy.MMMM.dd hh:mm aaa"
let date = dateFormatter.date(from: dateString)
print("date: \(String(describing: date))")
}
现在我得到如下输出
2019-12-16T05:33:43Z
date: nil
我不确定我犯了什么错误,我得到的结果为零,请调查一下。
您指定的日期格式有一个小问题。您的日期格式实际上应该是:
yyyy-MM-dd'T'HH:mm:ssZ
因此,将您的代码更改为:
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
输出:
date: Optional(2019-12-16 05:33:43 +0000)
在评论中根据 OP 提供的更多信息进行编辑
为了将一种格式的字符串转换为日期,然后再转换为另一种日期格式,您需要两个 DateFormatter
。下面将原始字符串日期转换,然后将日期输出为另一种格式:
let dateString: String = "2019-12-16T05:33:43Z"
print(dateString)
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
if let date = dateFormatter.date(from: dateString)
{
print("date: \(String(describing: date))")
let outputFormatter = DateFormatter()
outputFormatter.locale = Locale(identifier: "en_US_POSIX")
outputFormatter.dateFormat = "yyyy.MMMM.dd hh:mm aaa"
let outputDate = outputFormatter.string(from: date)
print("date: \(String(describing: outputDate))")
}
输出:
2019-12-16T05:33:43Z
date: 2019-12-16 05:33:43 +0000
date: 2019.December.16 05:33 AM
请检查以下解决方案,我已经测试它工作正常
let inputdateString: String = "2019-12-16T05:33:43Z"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-mm-dd'T'hh:mm:ssZ"
let inputDate = dateFormatter.date(from: inputdateString )!
print("Input date: \(String(describing: inputDate))")
//Converting to Display Date, you can reuse same date formater
dateFormatter.dateFormat = "yyyy.MMMM.dd hh:mm a"
let displayDate = dateFormatter.string(from: inputDate)
print("display date: \(String(describing: displayDate))")
输出:-
Input date: 2019-01-16 05:33:43 +0000
display date: 2019.January.16 11:03 AM