Swift 中日期与时间处理完全指南

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

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

开始课程

Swift 日期与时间操作入门

处理日期和时间是开发 iOS 和 macOS 应用的关键任务之一。无论是显示当前日期、计算事件之间的时间差,还是安排推送通知,Swift 都提供了强大而灵活的工具集来应对这些需求。本文将介绍主要的类和函数:Date、DateFormatter、Calendar、DateComponents 和 TimeInterval。您将学习如何在 Swift 中创建、格式化、比较和操作日期。

无论您是初学者还是希望系统化知识的有经验开发者,本文内容都将有所帮助。所有代码示例均可直接用于您的项目中。



处理日期的主要类



Date 类

Date 是一个基础类型,表示时间轴上的一个特定时刻,与时区或日历无关。它存储自 2001 年 1 月 1 日(Cocoa 纪元)以来经过的秒数。

import Foundation

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

// 从现在起 1 小时后的日期let oneHourLater = Date(timeIntervalSinceNow: 3600)print("一小时后: \\(oneHourLater)")

// 从纪元开始给定秒数的日期let epochDate = Date(timeIntervalSinceReferenceDate: 0)print("Cocoa 纪元: \\(epochDate)")


TimeInterval

TimeInterval 只是 Double 的一个别名,表示秒数。它用于指定时间间隔。

let interval: TimeInterval = 86400 // 24 小时对应的秒数let tomorrow = Date(timeIntervalSinceNow: interval)print("明天: \\(tomorrow)")


DateFormatter

DateFormatter 负责将日期与字符串相互转换。这是最常用的类之一。

let formatter = DateFormatter()formatter.dateStyle = .longformatter.timeStyle = .short

let currentDate = Date()let dateString = formatter.string(from: currentDate)print("格式化后的日期: \\(dateString)")

// 反向转换let dateFromString = formatter.date(from: "2025年4月15日 下午2:30")print("从字符串转换的日期: \\(dateFromString ?? Date())")

您可以使用 dateFormat 设置自定义格式:

formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"let customString = formatter.string(from: Date())print("自定义格式: \\(customString)")


日历与日期组件



Calendar

Calendar 允许您在特定日历(公历、伊斯兰历等)和时区的上下文中处理日期。

let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: Date())print("年: \\(components.year!), 月: \\(components.month!), 日: \\(components.day!)")


DateComponents

DateComponents 是一个结构体,包含单独的日期组成部分(年、月、日、小时等)。它用于创建新日期或从现有日期中提取部分信息。

// 从组件创建日期var birthdayComponents = DateComponents()birthdayComponents.year = 1990birthdayComponents.month = 6birthdayComponents.day = 15birthdayComponents.hour = 10

if let birthday = calendar.date(from: birthdayComponents) { print("生日: \\(birthday)")}

// 给日期增加天数if let nextWeek = calendar.date(byAdding: .day, value: 7, to: Date()) { print("一周后: \\(nextWeek)")}

组件可用于检查日期的属性:

let isToday = calendar.isDateInToday(Date())print("是今天吗? \\(isToday)")

let isWeekend = calendar.isDateInWeekend(Date())print("是周末吗? \\(isWeekend)")


Comp

博客

书籍推荐