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

问题描述

我从服务器获取一些日期字符串,例如“2021-06-25”

如果是今天日期或昨天日期,我必须显示今天昨天。 否则我必须显示 2021 年 6 月 25 日 对于今天和昨天日期,它工作正常。

但是,如果是前几天,它会显示 2021 年 6 月 25 日

如何显示2021 年 6 月 21 日

static func getDay(_ NowDay: String) -> String {
        
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let journalDate = dateFormatter.date(from: NowDay)
        
        if let convertedDate = journalDate {
            let relativeDateFormatter = DateFormatter()
            relativeDateFormatter.timeStyle = .none
            relativeDateFormatter.dateStyle = .medium
            relativeDateFormatter.locale = Locale(identifier: "en_GB")
            relativeDateFormatter.doesRelativeDateFormatting = true
            let inputFormatter = DateFormatter()
            inputFormatter.dateFormat = "yyyy-MM-dd"
            return relativeDateFormatter.string(from: convertedDate)
        }
        return ""
    }

有什么建议吗?

解决方法

如果您想要月份的全名,请使用 .long 而不是 .medium 作为日期样式:

relativeDateFormatter.dateStyle = .long

另请注意,您可以使用 ISO8601DateFormatter 来解析 nowDay,因为它采用 ISO-8601 格式:

let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [.withFullDate]
let journalDate = dateFormatter.date(from: nowDay)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...