本文主要是介绍非常方便的Swift公历转为农历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
翻到早年在iOS中开发的《梅花易数》代码,时间久了,对其中公历与农历互换的算法又看了半天。特此记下核心代码部分。
Cocoa已有一套公历农历互换的算法,非常简单、实用。在Swift中又进行了特定的简化,更加方便。
日历与日期
let gregorian = Calendar(identifier: .gregorian)
let components = gregorian.dateComponents([.year, .month, .day], from: Date());
print(components.year!, components.month!, components.day!) // 2021 8 20
日历与日期分开,需要年月日时分秒中的哪部分,自己取。
算出今天的农历
let lunar = Calendar(identifier: .chinese)
let convComp = lunar.dateComponents([.year, .month, .day, .hour], from: Date())
print(convComp.year!, convComp.month!, convComp.day!, convComp.hour!) // 38 7 13 2
使用.chinese
来构造Calendar
,即可拥有一套完整的农历日历。
打印结果中,38为今年年号“辛丑”在六十甲子纳音表中的序号,后面三数分别代表农历七月十三,02:00。美中不足的是小时没有转换为以十二地支为序的时辰。但这并不难实现。
算出特定日期的农历
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"
let date = formatter.date(from: "1984-08-05 07:15")print(date!.description) // 1984-08-04 23:15:00 +0000,格林尼治标准时间let lunar = Calendar(identifier: .chinese)
let convComp = lunar.dateComponents([.year, .month, .day, .hour], from: date!)
print(convComp.year!, convComp.month!, convComp.day!, convComp.hour!) // 1 7 9 7
公历1984年8月5日的农历为甲子年七月九日。
JavaScript语言也有相应的实现,可惜C语言尚没有发现。
这篇关于非常方便的Swift公历转为农历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!