Swift(iOS/macOS)中的日期处理:库概览
日期和时间处理是iOS和macOS开发中最常见且最复杂的任务之一。标准框架Foundation提供了强大但并非总是直观的工具:Date、DateFormatter、Calendar、TimeInterval。然而,为了简化日常操作(字符串解析、人类可读的时间间隔、本地化),存在专门的库。本文将介绍主要方法和流行工具。
1. Foundation内置工具
在引入第三方解决方案之前,掌握原生工具的使用非常重要。主要类:
Date— 时间点(精确到秒)。DateFormatter— 字符串与日期之间的转换。Calendar— 处理日历单位(年、月、日)。TimeInterval— 日期之间的秒数差。
示例:日期格式化
import Foundation
let now = Date()let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.locale = Locale(identifier: "ru_RU")let dateString = formatter.string(from: now)print(dateString) // 2025-02-18 14:30:00示例:计算天数差
let calendar = Calendar.currentlet start = Date()let end = calendar.date(byAdding: .day, value: 7, to: start)!let components = calendar.dateComponents([.day], from: start, to: end)print(components.day!) // 7这些功能足以满足大多数基本场景。但一旦需要复杂的解析或本地化,代码就会变得冗长。
2. DateHelper库
DateHelper — 一个轻量级库(可通过Swift Package Manager获取),为Date添加了便捷的扩展。主要特点是人类可读的相对日期。
安装:在Package.swift中添加依赖https://github.com/melvitax/DateHelper。
示例:「3小时前」
import DateHelper
let pastDate = Date() - 3.hoursprint(pastDate.toRelativeString()) // "3 hours ago"// 本地化时:print(pastDate.toRelativeString(locale: "ru"))该库支持多种输出格式:.short、.medium、.full。对于需要显示「刚刚」、「昨天」、「2周前」而无需编写自定义解析器的应用来说,这是理想的选择。
3. SwiftDate — 最强大的工具
SwiftDate(作者:Daniele Margutti)实际上是Swift中日期处理的事实标准。包括:
- 自动检测格式的字符串解析。
- 日期操作(添加/减去组件)。
- 以任意单位计算差值。
- 本地化(支持30+种语言)。
- 时区和日历处理。
安装:通过SPM或CocoaPods。
示例:解析未知格式的字符串
import SwiftDate
let dateString = "2025-02-18T14:30:00+03:00"if let date = dateString.toDate() { print(date.year) // 2025 print(date.month) // 2 print(date.toFormat("dd MMMM yyyy", locale: Locales.russian)) // "18 февраля 2025"}示例:获取人类可读的时间间隔
let start = DateInRegion(Date())let end = start + 2.hours + 30.minuteslet interval = start.toRelativeString(end, style: RelativeFormatter.defaultStyle())print(interval) // "2 hours 30 minutes later"SwiftDate还可以处理图书馆中也有
推荐