美文网首页Swift
Swift 一些时间处理

Swift 一些时间处理

作者: izsm | 来源:发表于2018-08-25 22:02 被阅读139次

1. 根据一个时间字符串转换任意样式

extension String {
    
    func formatDate() -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.current
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        guard let formatDate = dateFormatter.date(from: self) else { return "" }
        let calendar = Calendar.current
        _ = calendar.component(.era, from: formatDate)
        let year = calendar.component(.year, from: formatDate)
        let month = calendar.component(.month, from: formatDate)
        let day = calendar.component(.day, from: formatDate)
        let hour = calendar.component(.hour, from: formatDate)
        let minute = calendar.component(.minute, from: formatDate)
        let second = calendar.component(.second, from: formatDate)
        return String(format: "%.2zd年%.2zd月%.2zd日 %.2zd时:%.2zd分:%.2zd秒", year, month, day, hour, minute, second)
    }
}
案列:
let dateString = "2018-08-25 20:00:00"
debugPrint(dateString.formatDate()) // "2018年08月25日 20时:00分:00秒"

2. 获取星期几

extension String {
    
    func featureWeekday() -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.current
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        guard let formatDate = dateFormatter.date(from: self) else { return "" }
        let calendar = Calendar.current
        let weekDay = calendar.component(.weekday, from: formatDate)
        switch weekDay {
        case 1:
            return "星期日"
        case 2:
            return "星期一"
        case 3:
            return "星期二"
        case 4:
            return "星期三"
        case 5:
            return "星期四"
        case 6:
            return "星期五"
        case 7:
            return "星期六"
        default:
            return ""
        }
    }
}
案列
let dateString = "2018-08-25 20:00:00"
debugPrint(dateString.featureWeekday()) // "星期六"

3. 获取生肖年

先定义一组生肖:
private let zodiacs: [String] = ["鼠年", "牛年", "虎年", "兔年", "龙年", "蛇年", "马年", "羊年", "猴年", "鸡年", "狗年", "猪年"]
extension Date {
    // 生肖
    func zodiac() -> String {
        let calendar: Calendar = Calendar(identifier: .chinese)
        return zodiac(year: calendar.component(.year, from: self))
    }
    
    private func zodiac(year: Int) -> String {
        let zodiacIndex: Int = (year - 1) % zodiacs.count
        return zodiacs[zodiacIndex]
    }
}
案列
debugPrint(Date().zodiac()) // "狗年"

4. 获取天干地支

定义天干地支数组
private let heavenlyStems: [String] = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
private let earthlyBranches: [String] = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
计算天干地支
extension Date {
    // 天干地支
    func era() -> String {
        let calendar: Calendar = Calendar(identifier: .chinese)
        return era(year: calendar.component(.year, from: self))
    }
    
    private func era(year: Int) -> String {
        let heavenlyStemIndex: Int = (year - 1) % heavenlyStems.count
        let heavenlyStem: String = heavenlyStems[heavenlyStemIndex]
        let earthlyBrancheIndex: Int = (year - 1) % earthlyBranches.count
        let earthlyBranche: String = earthlyBranches[earthlyBrancheIndex]
        return heavenlyStem + earthlyBranche
    }
}
案列
debugPrint(Date().era()) // "戊戌"

5. 获取农历

定义农历数据
private let months: [String] = ["正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
                                "九月", "十月", "冬月", "腊月"]

private let days: [String] = [ "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十",
                               "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "廿",
                               "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"]
给定日期计算农历
extension Date {
    
    // 获取农历
    func lunar() -> String {
        let calendar: Calendar = Calendar(identifier: .chinese)
        let com = calendar.dateComponents(component(), from: self)
        let m_str = months[com.month! - 1]
        let d_str = days[com.day! - 1]
        return m_str + " " + d_str
    }
    
    private func component() -> Set<Calendar.Component> {
        return [.year, .month, .day, .hour, .minute, .second]
    }
}
案列
debugPrint(Date().lunar()) // "七月 十五"

相关文章

  • Swift 一些时间处理

    1. 根据一个时间字符串转换任意样式 案列: 2. 获取星期几 案列 3. 获取生肖年 先定义一组生肖: 案列 4...

  • Swift字符处理

    比起很多传统语言,Swift在字符处理方面显得更加简洁易用。本文会总结一些Swift在字符处理上的常用方法,持续更...

  • Swift学习_时间处理

    时间处理类(给Date添加一个Extension) 方法调用 附录 查看完整专栏《Swift学习》 有问题欢迎指正...

  • Swift 时间处理extension

    很多项目中都需要显示时间,比如聊天界面消息日期、朋友圈的说说的日期等。本文提供一个Swift下的关于时间处理的ex...

  • Swift 时间细节处理

    时间字符串细节处理

  • swift之inout关键字

    在swift中,我们常常对数据进行一些处理。因为swift的计算属性,所以如果不是大量重复性处理,基本可以在set...

  • 我的SWIFT时间处理

    使用IOS中的时间格式化工具(DateFormatter)可以很方便的对String和NSDate进行转换 使用N...

  • OC中有guard吗??

    先来看看 Swift 的 guard 关键字 guard 是 Swift 中特有的一个关键字,用于处理一些条件不成...

  • SwiftUI:navigation进阶

    就目前而言,SwiftUI在处理NavigationLink时存在一些限制。在SwiftUI:Swift协议中,我...

  • [OC] 如何在 OC 中使用类似 Swift 的 guard

    Swift 的 guard 关键字 guard 是 Swift 中特有的一个关键字,用于处理一些条件不成立时进行函...

网友评论

    本文标题:Swift 一些时间处理

    本文链接:https://www.haomeiwen.com/subject/sdogiftx.html