云鹰电商-让苹果手机更流畅

当前位置:首页 - 网游资讯 - 果粉资讯 - 正文

君子好学,自强不息!

处理时间和日期是软件开发中很常见的操作,几乎所有的编程语言都提供了对应的 API 来方便开发者对时间日期进行处理,Swift 也不例外,比如 DateFormatter ,使用它你可以将任意 日期 转换成自定义格式的文本字符串。

image.png

——但是, 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(&currentTime).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”添加我为好友

版权声明:如无特别注明,转载请注明本文地址!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。


搜索