介绍三种方法获取Date(NSDate)的年月日。
用date表示当前日期。测试日期为公历2017年2月5日,农历丁酉年,鸡年,正月初九。
letdate:Date=Date()NSDate*date=[NSDatedate];获取公历年月日
用Calendar(NSCalendar)获取公历年月日
letcalendar: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=[NSCalendarcalendarWithIdentifier:NSCalendarIdentifierGregorian];NSLog(@"Year:%ld",[calendarcomponent:NSCalendarUnitYearfromDate:date]);NSLog(@"Month:%ld",[calendarcomponent:NSCalendarUnitMonthfromDate:date]);NSLog(@"Day:%ld",[calendarcomponent:NSCalendarUnitDayfromDate:date]);结果
用Calendar和DateComponents(NSCalendar和NSDateComponents)获取公历年月日
letcomponentSet:Set
用DateFormatter(NSDateFormatter)获取公历年月日
获取农历年月日
用Calendar(NSCalendar)获取农历年月日
与公历相似,更改Calendar(NSCalendar)的初始化即可,其他代码相同
letcalendar:Calendar=Calendar(identifier:.chinese)NSCalendar*calendar=[NSCalendarcalendarWithIdentifier:NSCalendarIdentifierChinese];结果
用Calendar和DateComponents(NSCalendar和NSDateComponents)获取农历年月日
同上节用Calendar(NSCalendar)获取农历年月日
用DateFormatter(NSDateFormatter)获取农历年月日
与公历相似,在初始化DateFormatter(NSDateFormatter)之后,给calendar属性赋值即可,其他代码相同
letformatter:DateFormatter=DateFormatter()formatter.calendar=Calendar(identifier:.chinese)NSDateFormatter*formatter=[[NSDateFormatteralloc]init];formatter.calendar=[NSCalendarcalendarWithIdentifier:NSCalendarIdentifierChinese];结果
计算日期年份的生肖
自定义一个类ChineseCalendar来计算。十二生肖数组写在类外面。
复制代码代码如下:privateletZodiacs:[String]=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
十二生肖数组
ChineseCalendar的类方法staticfunczodiac(withYearyear:Int)->String{letzodiacIndex:Int=(year-1)%Zodiacs.countreturnZodiacs[zodiacIndex]}staticfunczodiac(withDatedate:Date)->String{letcalendar:Calendar=Calendar(identifier:.chinese)returnzodiac(withYear:calendar.component(.year,from:date))}测试
print("Chinesezodiacstring:",ChineseCalendar.zodiac(withDate:date))结果
计算日期年份的天干地支
在ChineseCalendar中用类方法计算。天干地支数组写在类外面。
天干地支数组
privateletHeavenlyStems:[String]=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]privateletEarthlyBranches:[String]=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]ChineseCalendar的类方法
staticfuncera(withYearyear:Int)->String{letheavenlyStemIndex:Int=(year-1)%HeavenlyStems.countletheavenlyStem:String=HeavenlyStems[heavenlyStemIndex]letearthlyBrancheIndex:Int=(year-1)%EarthlyBranches.countletearthlyBranche:String=EarthlyBranches[earthlyBrancheIndex]returnheavenlyStem+earthlyBranche}staticfuncera(withDatedate:Date)->String{letcalendar:Calendar=Calendar(identifier:.chinese)returnera(withYear:calendar.component(.year,from:date))}测试
print("Chineseerastring:",ChineseCalendar.era(withDate:date))