首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日期格式的Swift今天明天昨天

日期格式的Swift今天明天昨天
EN

Stack Overflow用户
提问于 2020-09-16 07:16:30
回答 2查看 5K关注 0票数 9

我想展示一个日期作为,6月13日星期六,

如果日期是当前的,它应该像, current 那样显示“今日之日”()。

我不能两者兼得

代码语言:javascript
运行
复制
guard let date = Date(fromString: "16 September 2020",
                      format: "dd MMMM yyyy") else { return nil }

        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        dateFormatter.doesRelativeDateFormatting = true

        header.titleLabel.text = dateFormatter.string(from: date)

对于上述代码,我可以将日期显示为“今日”、“今天”、“明天”、“明天”、“”、“昨天”、“”,但其他日期则没有显示,星期六,6月13日,。我尝试将日期格式dateFormatter.dateFormat = "EEEE, MMM d"应用于它没有返回任何内容的同一个dateFormatter

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 09:42:21

当设置DateFormatter和尝试同时应用自定义格式时,doesRelativeDateFormatting = true的行为不太好。因此,最简单的解决方案是使用StyleLocale提供的格式。

代码语言:javascript
运行
复制
let relativeDateFormatter = DateFormatter()
relativeDateFormatter.timeStyle = .none
relativeDateFormatter.dateStyle = .medium
relativeDateFormatter.locale = Locale(identifier: "en_GB")
relativeDateFormatter.doesRelativeDateFormatting = true

示例

代码语言:javascript
运行
复制
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"

let dates = ["2020-09-01", "2020-09-15", "2020-09-16", "2020-09-30"].compactMap { inputFormatter.date(from: $0)}

for date in dates {
    print(relativeDateFormatter.string(from: date))
}

2020年9月1日 昨天 今天 2020年9月30日

现在,如果您想应用自定义格式,那么在使用相同的DateFormatter实例时,我还没有找到解决方案,因此我们需要为自定义格式创建一个新的解决方案,并与检查一起使用,因此,我们仅在非“今日”时应用自定义格式。

代码语言:javascript
运行
复制
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMM dd"

for date in dates {
    let string = relativeDateFormatter.string(from: date)
    if let _ = string.rangeOfCharacter(from: .decimalDigits) {
         print(dateFormatter.string(from: date))
    } else {
        print(string)
    }
}

9月1日星期二 昨天 今天 9月30日,星期三

票数 17
EN

Stack Overflow用户

发布于 2020-12-01 15:45:41

您也可以使用RelativeDateFormatter。下面是一个示例:

代码语言:javascript
运行
复制
let date = Date().addingTimeInterval(-4 * 24 * 60 * 60)

let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full

let relativeDate = formatter.localizedString(for: date, relativeTo: Date())

print(relativeDate) // 4 days ago
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63914965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档