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

时间:2025-02-09 09:42:48

1. 创建日期转换分类

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

2. 测试方法

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