
func dateDiff(_ dateStr:String) -> String { var timeAgo = "10m" let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss" formatter.timeZone = NSTimeZone(name: "AST") as! TimeZone let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss" dateFormatter.timeZone = NSTimeZone(name: "AST") as! TimeZone let Now = formatter.string(from: Date()) if let date = formatter.date(from: dateStr){ if let NowDate = formatter.date(from: Now){ let components = Calendar.current.dateComponents([.day,.hour,.minute,.second],from: date,to: NowDate) let sec = components.second let min = components.minute let hours = components.hour let days = components.day if (sec! > 0){ if let secc = sec { timeAgo = "\(secc)s" } } if (min! > 0){ if let minn = min { timeAgo = "\(minn)m" } } if(hours! > 0){ if let houRSS = hours { timeAgo = "\(houRSS)h" } } if(days! > 0){ if let dayss = days { timeAgo = "\(dayss)d" } } } } return timeAgo}解决方法 出于性能原因,您应该将日期格式化程序的实例化从方法中拉出来,因为这是众所周知的计算密集型. 我还建议使用DateComponentsFormatter来简化已用时间的格式.
因此,定义两个格式化程序:
let dateFormatter: DateFormatter = { let _formatter = DateFormatter() _formatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss" _formatter.locale = Locale(IDentifIEr: "en_US_POSIX") _formatter.timeZone = TimeZone(abbreviation: "AST") // CurIoUs; we usually use `TimeZone(secondsFromGMT: 0)` (i.e. GMT/UTC/Zulu) return _formatter}()let componentsFormatter: DateComponentsFormatter = { let _formatter = DateComponentsFormatter() _formatter.maximumunitCount = 1 _formatter.unitsstyle = .abbreviated return _formatter}() 然后你的功能大大简化了:
func dateDiff(_ string: String) -> String? { guard let date = dateFormatter.date(from: string) else { return nil } return componentsFormatter.string(from: date,to: Date())} 另请注意:
>我直接使用TimeZone,而不是通过NSTimeZone进行往返;
>我将语言环境设置为en_US_POSIX,如果日期字符串的来源是Web服务或数据库,则应该为always use;
>我将“Now”转换为字符串并返回;只需直接使用Date();
唯一看起来可疑的事情是使用AST作为时区.通常日期字符串保存在GMT / UTC / Zulu中(例如,RFC 3339或ISO 8601).如果您可以控制,那可能是最佳做法,如果用户更改时区,可以避免出现问题;
总结以上是内存溢出为你收集整理的Swift – 计算经过的时间需要太长时间?全部内容,希望文章能够帮你解决Swift – 计算经过的时间需要太长时间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)