翻到早年在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公历转为农历相关推荐

  1. swift 时间选择器第三方。公历转农历,农历转公历。

    DFDatePicker. 使用swift5 *支持公元后的任意年的公历和农历,以及公历转农历,农历转公历. *支持农历闰月 *支持年月日时分秒,以及自由组合 *支持选中定位 *轻量化,共一个swif ...

  2. Lua 公历转农历以及24节气计算

    同上一篇公历转农历,但是这篇包含了节气计算,非打表法 --- --- Created by Administrator. --- DateTime: 2022/5/5 0005 18:04 --- m ...

  3. Python公历转换农历及简易万年历

    一般使用的万年历,只提供距今前后百年的日历.这是因为其所用的计算方法是一种简便的近似计算,适用范围较小.其次,天文学方法计算量大,不适合日常软件使用.但如果要进行历史研究,范围就超出常用日历,本文即实 ...

  4. EXCEL 自定义函数之公历转农历,VBA通过爬虫实现

    逛excelhome论坛时,有网友问到如何将公历自动转为农历.趁傍晚有点空闲时间,练一练手,特此记录,以便后期使用. 效果: 代码: Function nongli(gongli_date)'函数说明 ...

  5. lua|公历|农历 公历转农历打表计算

    最近有个需求是通过lua将指定的公历转换为对应的农历,在CSDN上查到了一些资料,本人做了些调整,和注释补充,以方便理解和学习,按需取用. --天干名称 local tianGan = {" ...

  6. python公历转农历_Python如何实现阳历转阴历的方法分享

    这篇文章主要介绍了Python实现公历(阳历)转农历(阴历)的方法,涉及农历算法原理及Python日期运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现公历(阳历)转农历(阴历)的 ...

  7. javascript 公历与农历相互转换工具类

    /*** 公历[1900-1-31,2100-12-31]时间区间内的公历.农历互转* @charset UTF-8* @Author Jea杨(JJonline@JJonline.Cn)* @Ver ...

  8. 公历转农历C/C++代码

    ** **公历转农历C/C++的实现 ** 本实现的算法,主要来自网络和加入自己的需要完善而来,有同样需要的人可以参考一下: 联系:domics.cn 用法: 备注:此文件是visual studio ...

  9. uniapp 原生js实现公历转农历

    代码思路在下面这个博客,我这里只是记录一下我是怎么在uniapp里使用的 原生js实现公历转农历_xm2by的博客-CSDN博客_javascript 农历原生js实现公历转农历参考文献:[1] 19 ...

最新文章

  1. 谈谈对Canal( 增量数据订阅与消费 )的理解
  2. 通过Cookie实现客户端与服务端会话的维持;
  3. ansible 学习笔记
  4. 谷歌、DeepMind提出高效Transformer评估基准
  5. python对文件的相关操作
  6. python 编译 pyc
  7. 最少拦截系统 贪心
  8. GLPI+OCS、SmartIT、LANDesk比较
  9. 基于项目管理的软件产品研发管理研究
  10. /usr/include/X11/Shell.h:51:26: 致命错误:X11/SM/SMlib.h:没有那个文件或目录
  11. js日期格式化 YYMMDD 转 YY-MM-DD 转 YY年MM月DD日
  12. 两轮差速AGV的控制理论
  13. 前后端请求设置签名验证,提升接口安全
  14. USB驱动之U盘驱动
  15. 永久删除的文件还能找回来吗 永久删除的文件如何恢复
  16. 如何有效设计你的调查问卷?
  17. 如何查找国际会议信息的总结
  18. 杰里之AI(692X系列)篇
  19. Leetcode 2327. Number of People Aware of a Secret [Python]
  20. 机器学习理论研究方法探讨

热门文章

  1. 互联网老辛2022年2月社群分享精华
  2. strongSwan:软件安装简介
  3. 【论文解读】Attributed Network Embedding for Learning in a Dynamic Environment
  4. 在HTML页面中引用Markdown编辑器(Editor.md)
  5. 美陆军拟建设机器人技术创新中心
  6. select @@identity的用法
  7. gm怎么刷东西 rust_决战常用GM刷物品命令
  8. Android 各个Support Library介绍
  9. 按照 老罗博客学习安卓 记录
  10. 小白日记5:kali渗透测试之被动信息收集(四)--theHarvester,metagoofil,meltag,个人专属密码字典--CUPP