Swift 日期与时间处理:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Swift 中处理日期和时间:从基础到高级技巧



处理日期和时间是开发 iOS 和 macOS 应用程序的关键任务之一。Swift 为此提供了强大而灵活的工具集:Date、DateFormatter、Calendar、DateComponents 和 TimeInterval。在本文中,我们将深入探讨每一个工具,展示实际示例,并学习如何解决格式化日期、计算时间差以及处理时区和日历等典型任务。



1. 基础:Date 类和 TimeInterval



表示时间点的基础类型是 Date。它存储自 2001 年 1 月 1 日 00:00:00 UTC(Apple 的参考日期)以来经过的秒数。



创建和比较日期:

import Foundation

// 当前日期和时间let now = Date()print("现在: \\(now)")

// 基于时间间隔的日期(从当前时刻起 120 秒)let futureDate = Date(timeIntervalSinceNow: 120)print("2 分钟后: \\(futureDate)")

// 基于自参考日期的固定时间间隔的日期let specificDate = Date(timeIntervalSinceReferenceDate: 3600 * 24 * 365) // 从 2001 年起 1 年print("大致日期: \\(specificDate)")

// 比较日期if now < futureDate { print("当前日期早于未来日期")}


TimeInterval 只是表示秒数的 Double 的别名。它用于计算日期之间的差值:

let startDate = Date()sleep(2) // 模拟延迟let endDate = Date()

let elapsed: TimeInterval = endDate.timeIntervalSince(startDate)print("经过了 \\(elapsed) 秒") // 将输出 ~2.0

// 逆向操作let minutes: TimeInterval = 5 * 60let fiveMinutesLater = Date(timeInterval: minutes, since: startDate)


2. 使用 DateFormatter 格式化日期



为了以用户可读的格式显示日期,使用 DateFormatter。它支持本地化和多种样式。



基本格式化:

let formatter = DateFormatter()formatter.locale = Locale(identifier: "zh_CN") // 中文区域设置formatter.timeZone = TimeZone.current       // 当前时区

// 标准样式formatter.dateStyle = .fullformatter.timeStyle = .shortprint(formatter.string(from: Date())) // 例如:"2025年2月24日星期五 下午2:30"

formatter.dateStyle = .mediumformatter.timeStyle = .noneprint(formatter.string(from: Date())) // "2025年2月24日"


自定义格式:

formatter.dateFormat = "yyyy-MM-dd HH:mm"print(formatter.string(from: Date())) // "2025-02-24 14:30"

// 将字符串解析为日期let dateString = "2024-12-25 10:00"if let parsedDate = formatter.date(from: dateString) { print("解析后的日期: \\(parsedDate)")}


重要提示: 在解析时,始终检查 date(from:) 是否返回 nil。字符串格式不正确或区域设置不匹配将导致错误。



3. 日历计算:Calendar 和 DateComponents



Calendar 类封装了关于日历系统(公历、伊斯兰历、佛历等)的信息,并允许执行复杂的日期操作。DateComponents 用于描述日期的各个组成部分(年、月、日、小时等)。



提取日期组成部分:

let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .weekday], from: Date())

print("年: \\(components.year!)")print("月: \\(components.month!)")print("日: \\(components.day!)")print("星期几: \\(components.weekday!)") // 1 - 星期日, 2 - 星期一...

博客

书籍推荐