处理时间和日期是软件开发中很常见的操作,几乎所有的编程语言都提供了对应的 API 来方便开发者对时间日期进行处理,Swift 也不例外,比如 DateFormatter ,使用它你可以将任意 日期 转换成自定义格式的文本字符串。
——但是, DateFormatter 很慢! 它是一个非常耗时的操作,从创建到使用,每一步都占用了大量的时间,如果不是必要,几乎所有的高级程序员都不会建议你使用这个对象。
老生常谈的 C 语言
Swift 是可以直接调用 C 语言的,除了 Foundation 里的 DateFormatter ,其实你还可以选择C 的strftime ,它比起前者少了不少高级功能,但如果你的需求仅仅是格式化输出时间,那 的strftime 将非常好用。
优点(相对 DateFormatter 来说):
缺点:
代码
好在,复杂的代码操作也只需要一次性封装即可,通常与服务器通讯或者为用户显示时间,也不需要复杂的时区操作,所以绝大部分的业务场景是可以用 的strftime 代替 DateFormatter 的。
我们写一个 日期 的 extension 来封装这个操作:
extension Date {
func formattedTime(format: String) -> String? {
let resultSize = format.count + 200
var result = [Int8](repeating: 0, count: resultSize)
var currentTime = time(nil)
var time = localtime(¤tTime).pointee
guard strftime(&result, resultSize, format, &time) != 0 else {
return nil
return String(cString: result, encoding: .utf8)
这里有些困难的地方在于需要使用 C 指针,但 Swift 又把指针隐藏的很好,总之,我们使用一个 INT8 的数组来保存返回的C字符串,最终再将它转换成 Swift 里的字符串返回。
格式化
代码写好了,就剩下格式问题, 的strftime 和 DateFormatter 的格式不一样,后者通常是直接使用对应的宏,比如 YYYY 代表了四位数字的年份,而 YY 是两位数字的年份,前者则使用的占位符, %和 等同于 YYYY , %和 则等同于 YY ......
的strftime 的完整符号列表见 这里(英文),这里(中文)
使用
接下来就可以使用一行代码实现格式化时间日期输出了:
print(Date().formattedTime(format: "%y|%Y|%m|%d|%I|%H|%M|%S|%w"))
本文来源:云鹰电商
本文地址:https://www.yunyingds.com/post/1930.html
关注我们:微信搜索“xiaoqihvlove”添加我为好友
版权声明:如无特别注明,转载请注明本文地址!
- •苹果 M4 Max GPU 性能可媲美 RTX 4080
- •iOS 18.1 Beta 3 新增AI「重要通知」功能
- •微软宣布 Windows Mail 今年 12 月底全面停止运作 用户需转到 Outlook
- •iOS18 手电筒界面大改版! 支持滑动调整亮度与广度
- •VMware 宣布 Fusion 与 Workstation 全面免费开放使用
- •20个iPhone 16规格爆料与iPhone 15差异比较一表看完
- •iPhone 16如何关机、重新开机与强制关机教学技巧
- •更新iOS 18.1耗电有改善吗?
- •macOS Sequoia 15.1 beta 7 版本发布,公众版即将到来
- •iOS 18.1 Clean Up 去除功能实测,iPhone 终于有这功能可用了