日期转换 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")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一个Java方法来实现这个功能。代码如下: ```java import java.time.*; import java.time.format.*; import java.util.Locale; public class LocalDateTimeConverter { public static LocalDateTime convert(String input) { try { // 尝试按照秒级时间戳格式解析 long epochSecond = Long.parseLong(input); return LocalDateTime.ofEpochSecond(epochSecond, 0, ZoneOffset.UTC); } catch (NumberFormatException e) { // 忽略异常,尝试下一个格式 } try { // 尝试按照毫秒级时间戳格式解析 long epochMilli = Long.parseLong(input); return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC); } catch (NumberFormatException e) { // 忽略异常,尝试下一个格式 } try { // 尝试按照EEE MMM dd HH:mm:ss zzz yyyy格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); return LocalDateTime.parse(input, formatter); } catch (DateTimeParseException e) { // 忽略异常,尝试下一个格式 } try { // 尝试按照yyyy-MM-dd HH:mm:ss格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); return LocalDateTime.parse(input, formatter); } catch (DateTimeParseException e) { // 忽略异常,尝试下一个格式 } try { // 尝试按照yyyy-MM-dd格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(input, formatter); return LocalDateTime.of(date, LocalTime.MIDNIGHT); } catch (DateTimeParseException e) { // 忽略异常,尝试下一个格式 } try { // 尝试按照yyyy/MM/dd HH:mm:ss格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); return LocalDateTime.parse(input.replaceAll("-", "/"), formatter); } catch (DateTimeParseException e) { // 所有格式解析失败,抛出异常 throw new IllegalArgumentException("Invalid input string: " + input); } } } ``` 这个方法接收一个字符串参数,尝试将其解析为LocalDateTime对象,并返回解析结果。它首先尝试按照秒级时间戳格式解析,然后按照毫秒级时间戳格式解析,然后按照EEE MMM dd HH:mm:ss zzz yyyy格式解析,然后按照yyyy-MM-dd HH:mm:ss格式解析,然后按照yyyy-MM-dd格式解析,最后按照yyyy/MM/dd HH:mm:ss格式解析。如果所有格式都无法解析,它将抛出一个IllegalArgumentException异常。 请注意,由于输入字符串的格式可能不同,因此您可能需要根据实际情况调整这个方法的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanyang Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值