将日期字符串转换为所需的日期格式,输出为零

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