时间转换与时间戳的实用指南

星尘观点

timestamp
time convert
2025-09-17
时间转换与时间戳的实用指南

iOS时间库的使用指南

Foundation框架中的Date

iOS开发主要使用Foundation框架的Date类处理时间。Date表示自2001年1月1日以来的秒数,精度达到毫秒级。创建当前时间很简单:

let currentDate = Date()

Date对象存储的是UTC时间,不受时区影响。要显示给用户时,需要转换为本地时间。

日期格式化

使用DateFormatter进行日期与字符串的相互转换:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = formatter.string(from: Date())

常见格式符号:

  • yyyy:4位数年份
  • MM:月份
  • dd:日期
  • HH:24小时制小时
  • mm:分钟
  • ss:秒

时间计算

Calendar类提供丰富的时间计算方法:

let calendar = Calendar.current
let tomorrow = calendar.date(byAdding: .day, value: 1, to: Date())

可以计算日期间隔:

let components = calendar.dateComponents([.day], from: startDate, to: endDate)
let daysBetween = components.day

时区处理

正确处理时区很重要:

formatter.timeZone = TimeZone(identifier: "Asia/Shanghai")

获取系统当前时区:

let localTimeZone = TimeZone.current

性能优化

频繁创建DateFormatter会影响性能。最佳实践是复用实例:

// 全局或静态变量
static let sharedFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    return formatter
}()

时间戳转换

iOS使用TimeInterval类型表示时间戳:

// 获取当前时间戳
let timestamp = Date().timeIntervalSince1970

// 时间戳转Date
let date = Date(timeIntervalSince1970: timestamp)

注意事项

  1. 日期格式字符串区分大小写
  2. 多线程环境下DateFormatter不是线程安全的
  3. 用户可能更改设备的时区设置
  4. 夏令时转换需要特殊处理