苹果iOS新手开发之Swift 中获取时间戳有哪些方式?

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在 Swift 中获取时间戳(Timestamp)的几种常见方法和它们的区别如下:

1. 使用 Date 对象

Date 对象代表了单一时刻,可以通过它获取自1970年1月1日(UTC)以来的秒数,这是最常见的方式。

获取当前时间的时间戳
let currentDate = Date()
let timeInterval = currentDate.timeIntervalSince1970
print(timeInterval)  // 输出一个Double,表示从1970到现在的秒数
获取毫秒时间戳
let milliseconds = currentDate.timeIntervalSince1970 * 1000
print(milliseconds)  // 输出自1970年以来的毫秒数

2. 使用 CFAbsoluteTimeGetCurrent

CFAbsoluteTimeGetCurrent 是 Core Foundation 中的方法,可以直接获取当前时间自2001年以来的秒数。

import CoreFoundation

let coreFoundationTime = CFAbsoluteTimeGetCurrent()
print(coreFoundationTime)  // 输出自2001年1月1日以来的秒数

同样,你可以将其转换为从1970年以来的秒数:

let unixTimestamp = coreFoundationTime + kCFAbsoluteTimeIntervalSince1970
print(unixTimestamp)  // 输出自1970年以来的秒数

3. 使用 DispatchTime

DispatchTimeDispatchWallTime 是 GCD 库中的类型,主要用于表示调度时间点。

获取当前时间
let dispatchTime = DispatchTime.now()
print(dispatchTime)  // 输出当前的调度时间点
转化为纳秒
let nanoTime = dispatchTime.uptimeNanoseconds
print(nanoTime)  // 输出从设备启动以来的纳秒数
转化为秒
let seconds = Double(nanoTime) / 1_000_000_000
print(seconds)  // 转换为秒数输出

4. 使用 ProcessInfo

ProcessInfo 可以用来获取进程运行到当前的时间。

import Foundation

let processInfo = ProcessInfo.processInfo.systemUptime
print(processInfo)  // 输出设备启动以来的秒数

区别总结

1、 Date + timeIntervalSince1970

  • 用途: 通用,适用于绝大多数获取当前时间的情况。
  • 优点: 易用,属于 Foundation 框架,精度上可以接受。
  • 缺点: 精度为 Double,秒级精度。

2、 CFAbsoluteTimeGetCurrent

  • 用途: Core Foundation 库的低级精确时间获取。
  • 优点: 更底层,如果需要与 Core Foundation 相配合很有用。
  • 缺点: 相对不常用,需将相对时间转换为常见的 Unix 时间戳。

3、 DispatchTime

  • 用途: 用于 GCD 调度相关的时间操作。
  • 优点: 高精度,纳秒级别,常用于性能分析和调度。
  • 缺点: 主要在 GCD 调度中使用,不适合表示绝对时间。

4、 ProcessInfo

  • 用途: 获取设备启动以后的时间。
  • 优点: 用于需要计算设备启动后经过时间的场景。
  • 缺点: 不表示绝对时间,只表示设备启动后的时间。

欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值