日期转换 EEE MMM dd HH:mm:ss zzz yyyy

1. 创建日期转换分类

//
//  Date+Extension.swift
//
import Foundation
extension Date{
    
    /// 将格式的字符串转换成日期
    static func fromData(string: String) ->Date?{
        let df = DateFormatter()
        df.locale = Locale(identifier: "en")
        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        return df.date(from: string)
    }
    
    /**
        返回当前日期多描述信息
        刚刚(一分钟内)
        x分钟前(一小时内)
        x小时前(当天)
        昨天 HH:mm(昨天)
        MM-dd HH:mm(一年内)
        yyyy-MM-dd HH:mm(更早期)
     */
    var dateDescription: String{
        //取出当前日历 - 提供了大量的日历相关的操作函数
        let calendar =  Calendar.current
        //处理今天的日期
        if calendar.isDateInToday(self) {
          let delta = Int(Date().timeIntervalSince(self))
            if delta < 60 {
                return "刚刚"
            }
            if delta < 3600{
                return "\(delta/60) 分钟前"
            }
            
            return "\(delta/3600) 小时前"
        }
        //非今天的日期
        var fmt = " HH:mm"
        if calendar.isDateInYesterday(self){
            fmt = "昨天" + fmt
        }else{
            fmt = "MM-dd" + fmt
            //直接获取 “年”的数值
            let comps = calendar.dateComponents([.year], from: self, to: Date())
            if let year = comps.year, year > 0 {
                fmt = "yyyy-" +  fmt
            }
        }
        //根据格式字符串生成描述字符串
        let df = DateFormatter()
        df.dateFormat = fmt
        df.locale = Locale(identifier: "en")
        return df.string(from: self)
    }
}

2. 测试方法

    override func viewDidLoad() {
        super.viewDidLoad()
        //目标: 特殊格式的字符串
        //步骤
        //1.建立 ‘日期’对象
        //2.根据日期对象,计算显示描述字符
        let str = "Mon Jul 25 16:41:43 +0800 2022"
        print(Date.fromData(string: "Mon Jul 26 06:41:43 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon Jul 26 10:03:01 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon Jul 26 10:06:01 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon Jul 26 00:00:02 +0800 2022")?.dateDescription)
        
        print(Date.fromData(string: "Mon Jul 25 16:41:43 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon Jul 24 16:41:43 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon May 24 16:41:43 +0800 2022")?.dateDescription)
        print(Date.fromData(string: "Mon May 28 16:41:43 +0800 2021")?.dateDescription)
    }

3. 输出结果

Optional("3 小时前")
Optional("3 分钟前")
Optional("刚刚")
Optional("10 小时前")
Optional("昨天 16:41")
Optional("07-24 16:41")
Optional("05-24 16:41")
Optional("2021-05-28 16:41")

你可能感兴趣的:(Swift,Sina,iOS,Swift)