介绍三种方法获取 date (nsdate) 的年月日。
用 date 表示当前日期。测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九。
1
2
3
|
let date: date = date() nsdate *date = [nsdate date]; |
获取公历年月日
用 calendar (nscalendar) 获取公历年月日
1
2
3
4
|
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)) |
1
2
3
4
|
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) 获取公历年月日
1
2
3
4
5
|
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!) |
1
2
3
4
5
|
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) 获取公历年月日
1
2
3
4
5
6
7
8
|
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)) |
1
2
3
4
5
6
7
8
|
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) 的初始化即可,其他代码相同
1
|
let calendar: calendar = calendar(identifier: .chinese) |
1
|
nscalendar *calendar = [nscalendar calendarwithidentifier:nscalendaridentifierchinese]; |
结果
用 calendar 和 datecomponents (nscalendar 和 nsdatecomponents) 获取农历年月日
同上节用 calendar (nscalendar) 获取农历年月日
用 dateformatter (nsdateformatter) 获取农历年月日
与公历相似,在初始化 dateformatter (nsdateformatter) 之后,给 calendar 属性赋值即可,其他代码相同
1
2
|
let formatter: dateformatter = dateformatter() formatter.calendar = calendar(identifier: .chinese) |
1
2
|
nsdateformatter *formatter = [[nsdateformatter alloc] init]; formatter.calendar = [nscalendar calendarwithidentifier:nscalendaridentifierchinese]; |
结果
计算日期年份的生肖
自定义一个类 chinesecalendar 来计算。十二生肖数组写在类外面。
private let zodiacs: [string] = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
十二生肖数组
1
2
3
4
5
6
7
8
9
10
|
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)) } |
测试
1
|
print( "chinese zodiac string:" , chinesecalendar.zodiac(withdate: date)) |
结果
计算日期年份的天干地支
在 chinesecalendar 中用类方法计算。天干地支数组写在类外面。
天干地支数组
1
2
|
private let heavenlystems: [string] = [ "甲" , "乙" , "丙" , "丁" , "戊" , "己" , "庚" , "辛" , "壬" , "癸" ] private let earthlybranches: [string] = [ "子" , "丑" , "寅" , "卯" , "辰" , "巳" , "午" , "未" , "申" , "酉" , "戌" , "亥" ] |
chinesecalendar 的类方法
1
2
3
4
5
6
7
8
9
10
11
12
|
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)) } |
测试
1
|
print( "chinese era string:" , chinesecalendar.era(withdate: date)) |
结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/silence-cnblogs/archive/2017/02/05/6368437.html