如何将DateComponents格式化为指定样式的部分日期字符串
实现方法
DateComponentsFormatter 的设计用途是格式化时间间隔(比如两个日期相差的年数、月数),不支持输出具体日期的自然语言名称,你可以用以下两种方式实现需求:
- 方案1(优先推荐,适配多语言本地化)
先将DateComponents转为Date实例,再用DateFormatter格式化:
let components = DateComponents(calendar: .current, timeZone: .current, year: 2021, month: 3) // 校验components合法性并转Date guard let date = components.date else { // 处理非法日期逻辑 return } let formatter = DateFormatter() // 固定英文格式用下面这句 formatter.dateFormat = "MMMM yyyy" // 若需要跟随系统语言自动适配,替换为下面的代码,中文环境会自动输出「2021年3月」 // formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMMM yyyy", options: 0, locale: .current) let result = formatter.string(from: date) // 英文环境下输出:March 2021
- 方案2(仅适用固定英文场景,不推荐)
直接读取DateComponents的字段手动拼接:
guard let year = components.year, let month = components.month, (1...12).contains(month) else { return } // 直接获取英文月份全称 let monthNames = DateFormatter().monthSymbols let result = "\(monthNames[month - 1]) \(year)"
内容的提问来源于stack exchange,提问作者ADB
相关产品推荐
相关产品推荐

