Swift:将开始和结束日期格式化为单个字符串

Posted

技术标签:

【中文标题】Swift:将开始和结束日期格式化为单个字符串【英文标题】:Swift: Format a a start and end date into a single string 【发布时间】:2018-06-12 20:24:12 【问题描述】:

我有这两个字符串格式的日期:

let startDate = "2018-06-14"
let endDate = "2018-06-17"

我想将它们一起格式化:

2018 年 6 月 14-17 日

但是,如果开始日期和结束日期在不同月份,则应采用如下格式:

2018 年 6 月 29 日 - 7 月 1 日

如果开始日期和结束日期在不同年份,则应采用如下格式:

2018 年 12 月 29 日 - 2019 年 1 月 1 日

有没有使用 Swift 原生的 DateFormatter 的简单方法?

有没有流行的 pod 可以帮助解决这个问题?

完成这种格式化的最佳做法是什么?

【问题讨论】:

我会为此查看DateComponentsclass,请参阅Apple documentation。 使用DateIntervalFormatter。但首先从您的字符串中创建两个 Date 实例。 DateIntervalFormatterdateStyle = .longtimeStyle = .none 应该让您非常接近您想要的。 【参考方案1】:

这是我的答案:

   if let startDate = startDateString.toDate(withFormat: "yyyy-MM-dd"),
        let endDate = endDateString.toDate(withFormat: "yyyy-MM-dd") 
        let formatter = DateIntervalFormatter()
        formatter.dateStyle = .long
        formatter.timeStyle = .none
        dateLabel.text = formatter.string(from: startDate, to: endDate)
    

还有这个扩展:

extension String 

    func toDate(withFormat format: String) -> Date? 
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter.date(from: self)
    


【讨论】:

这并不像它可能的那样有用,因为toDate(withFormat:) 不是标准方法。 我已经添加了函数 toDate(withFormat format: String)

以上是关于Swift:将开始和结束日期格式化为单个字符串的主要内容,如果未能解决你的问题,请参考以下文章

将json的日期属性反序列化为LocalDate

使用 Pandas 将字符串格式化为日期时间 - 指令问题

SWIFT:从文本字段格式化为日期不起作用

Dart - 将字符串日期格式化为日期时间

当我将字符串格式化为日期时出现错误的日期

将字符串格式化为日期时间