zoukankan      html  css  js  c++  java
  • iOS 获取公历、农历日期的年月日

    介绍三种方法获取 Date (NSDate) 的年月日。

    用 date 表示当前日期。测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九。

    let date: Date = Date()
    
    NSDate *date = [NSDate date];
    

    获取公历年月日

    用 Calendar (NSCalendar) 获取公历年月日

    let calendar: Calendar = Calendar(identifier: .gregorian)
    print("Year:", calendar.component(.year, from: date))
    print("Month:", calendar.component(.month, from: date))
    print("Day:", calendar.component(.day, from: date))
    
    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    NSLog(@"Year: %ld", [calendar component:NSCalendarUnitYear fromDate:date]);
    NSLog(@"Month: %ld", [calendar component:NSCalendarUnitMonth fromDate:date]);
    NSLog(@"Day: %ld", [calendar component:NSCalendarUnitDay fromDate:date]);

    结果

    用 Calendar 和 DateComponents (NSCalendar 和 NSDateComponents) 获取公历年月日

    let componentSet: Set<Calendar.Component> = Set(arrayLiteral: .year, .month, .day)
    let components: DateComponents = calendar.dateComponents(componentSet, from: date)
    print("Year:", components.year!)
    print("Month:", components.month!)
    print("Day:", components.day!)
    
    NSCalendarUnit calenderUnit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *components = [calendar components:calenderUnit fromDate:date];
    NSLog(@"Year: %ld", components.year);
    NSLog(@"Month: %ld", components.month);
    NSLog(@"Day: %ld", components.day);

    结果

    用 DateFormatter (NSDateFormatter) 获取公历年月日

    let formatter: DateFormatter = DateFormatter()
    print("Date formatter identifier:", formatter.calendar.identifier) // gregorian by default
    formatter.dateFormat = "y"
    print("Year:", formatter.string(from: date))
    formatter.dateFormat = "M"
    print("Month:", formatter.string(from: date))
    formatter.dateFormat = "d"
    print("Day:", formatter.string(from: date))
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSLog(@"Date formatter calendar: %@", formatter.calendar.calendarIdentifier); // gregorian by default
    formatter.dateFormat = @"y";
    NSLog(@"Year: %@", [formatter stringFromDate:date]);
    formatter.dateFormat = @"M";
    NSLog(@"Month: %@", [formatter stringFromDate:date]);
    formatter.dateFormat = @"d";
    NSLog(@"Day: %@", [formatter stringFromDate:date]);


    获取农历年月日

    用 Calendar (NSCalendar) 获取农历年月日

    与公历相似,更改 Calendar (NSCalendar) 的初始化即可,其他代码相同

    let calendar: Calendar = Calendar(identifier: .chinese)
    
    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];

    结果

    用 Calendar 和 DateComponents (NSCalendar 和 NSDateComponents) 获取农历年月日

    同上节用 Calendar (NSCalendar) 获取农历年月日

    用 DateFormatter (NSDateFormatter) 获取农历年月日

    与公历相似,在初始化 DateFormatter (NSDateFormatter) 之后,给 calendar 属性赋值即可,其他代码相同

    let formatter: DateFormatter = DateFormatter()
    formatter.calendar = Calendar(identifier: .chinese)
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];

    结果

    计算日期年份的生肖

    自定义一个类 ChineseCalendar 来计算。十二生肖数组写在类外面。

    十二生肖数组

    private let Zodiacs: [String] = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]

    ChineseCalendar 的类方法

    static func zodiac(withYear year: Int) -> String {
    	let zodiacIndex: Int = (year - 1) % Zodiacs.count
    	return Zodiacs[zodiacIndex]
    }
        
    static func zodiac(withDate date: Date) -> String {
    	let calendar: Calendar = Calendar(identifier: .chinese)
    	return zodiac(withYear: calendar.component(.year, from: date))
    }

    测试

    print("Chinese zodiac string:", ChineseCalendar.zodiac(withDate: date))

    结果

    计算日期年份的天干地支

    在 ChineseCalendar 中用类方法计算。天干地支数组写在类外面。

    天干地支数组

    private let HeavenlyStems: [String] = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
    private let EarthlyBranches: [String] = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]

    ChineseCalendar 的类方法

    static func era(withYear 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
    }
        
    static func era(withDate date: Date) -> String {
    	let calendar: Calendar = Calendar(identifier: .chinese)
    	return era(withYear: calendar.component(.year, from: date))
    }

    测试

    print("Chinese era string:", ChineseCalendar.era(withDate: date))

    结果

    转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6368437.html

  • 相关阅读:
    Top 10 Product Manager Skills To Boost Your Resume In 2021
    大数据知识梳理
    B端产品如何设计权限系统?
    华三盒式交换机MAC、ARP、Route性能表项参数查询
    中了传说中的挖矿病毒
    SqlServer 2019 事务日志传送
    docker中生成的pdf中文是方框的解决方案
    The Live Editor is unable to run in the current system configuration
    2021 面试题大纲
    五分钟搞定Docker安装ElasticSearch
  • 原文地址:https://www.cnblogs.com/lxllanou/p/14480184.html
Copyright © 2011-2022 走看看