背景

命理学是对人生命运规律的探索,以人的各式各样的数字(出生年月日、姓名笔划等)来推测人的性格与命运并占卜推测未来会发生的事情。古今中外都有相关方面的理论,中国的周易系列就是探讨这方面的,还有八字命理、紫微斗数、七星命理和占星术等。 正所谓:谋事在人,成事在天。但倘若命理真是注定的,宇宙也将会失去前进的动力。因此命理学虽然存在一定的道理,但是只可用于趋吉避凶,若没有实际行动,那一切也都是枉然。

涉及到方方面面,这里我需要一个阳历农历换算的工具,毕竟我是自己动手主义,并不想花钱调用一些收费API。上网找了一些人写过的代码,同一天得出的干支也不尽相同,我估计他们都只是随便写一个,能换算出一个结果就行,也没有进行大量测试,而我们算命的时候,最怕的就是日子算错了,那一切就白搭了。

我们的目的是实现一个准确的换算,数据必须与如下所示的这个万年历一致:

这里非常感谢晶晶博主的文章:1900年至2100年公历、农历互转Js代码,很详尽,注释也很完整,我们以此为基准进行后续的实现。

实现步骤

关键点

  • Javascript中的Date对象,十二个月份取值范围是0-11,1900年1月1日在Javascript中是new Date(1900,0,1),而在C#中是new DateTime(1900,1,1),因此在转换JS函数时要特别注意各个月份变量+1,-1的处理。

  • Javascript中的UTC() 方法可根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。在C#中可以用如下代码实现:

    private double UTC(int y, int m, int d)
    {
    return (new DateTime(y, m, d) - new DateTime(1970, 1, 1)).TotalMilliseconds;
    }
    注意这里不用判断年份是在1970年之前还是之后,在1970年之前(如1900年)的直接返回一个负值即可。
  • 从API返回的数据中,有些阳历2月份的数据有30天和31天,而很明显我们阳历2月份,只有28天或者29天,需要处理一下。

  • 本文相关代码Github下载

结束语

命理,是生命的道理。

“命运”包括两个含义,一是命,即由命主的八字所组成的一定的排列组合,由它所反映的吉或凶,福或祸,同一时辰那一瞬间同时落地的孩子,他们的命早已注定。二是运,即人一生所走过的每个阶段,家庭、社会、人事际遇的不同,成就了不同的个体。“命”和“运”的组合构成了千姿百态的人生“命运”。

很多人说,既然命是注定的,那算也是这个,不算也是这个命啊,那又何必算呢?就算你算的再准又有什么意义呢?岂不是浪费时间?

算命其实和体检颇有些相似之处。你的身体条件、有什么遗传基因、可能会在什么年纪导致什么疾病,这是先天带来的,是父母遗传的,DNA,嗯,以当前的科学解释是没办法改变的。那大家何必去医院检查身体呢?大可不必去啊,反正有遗传会得肝病的,始终会得肝病,有遗传会得心脏病的人,终归会得心脏病,又何必去检查呢?再说了,就算检查出来了,又有什么用呢?反正这些遗传病也不好治?可他们完全不明白,按时去医院体检,可以最大限度的调整好自己的身体状态,就算遗传病是不可避免的,但是起码医生可以帮助病人将发病的时间延后、或者减轻痛苦、甚至延长生命。

其实,这就是改运的一种表现。所以,同样的道理,我们算命的意义,就在于躲避、减轻人生道路上可能会出现的未知灾难。尽管因为受到先天条件的限制,完全改变命运是不可能的,但是在某一段路上改善一下却是完全可以做到的。

用C#实现一个百度万年历的更多相关文章

  1. 推荐一个百度网盘搜索工具www.sososo.me

    推荐一个百度网盘搜索工具 http://www.sososo.me

  2. 用python写一个百度翻译

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  3. HTML连载31-制作一个百度首页

    一. 我们制作一个百度首页作为练习,可直接复制该代码保存后缀名为.html来查看 <!DOCTYPE html> <html lang="en"> < ...

  4. 面试一个百度T7程序员,一道简单的题没答上来!网友却都在吐槽面试官!

    程序员面试时都考些什么? 一个面试官得意洋洋地说自己面了一个百度T7,出了一道coding题,结果对方连最长上升子序列都写不出来.   楼主本想嘲弄一下百度T7的代码水平低,没想到网友们炸开了锅,纷纷 ...

  5. 实现了一个百度首页的彩蛋——CSS3 Animation简介

    在百度搜索中有这样一个彩蛋:搜索“旋转”,“跳跃”,“反转”等词语,会出现相应的动画效果(搜索“反转”后的效果).查看源码可以发现,这些效果正是通过CSS3的animation属性实现的. 实现这个彩 ...

  6. 使用python和selenium写一个百度搜索的case

    今天练习的内容主要写了一个小功能,在百度上搜索某词汇,然后实现web上的back功能 代码如下: import unittest from selenium import webdriver from ...

  7. nw.js---开发一个百度浏览器

    使用nw.js开发一个简单的百度浏览器就很简单了,只需要在配置里面写入: { // "main": "index.html", "main" ...

  8. 一个百度MAP导航的基础封装

    项目中需要根据点击时候点击的内容,输入百度地图查找并展示规划等相关功能 于是封装了一个单独的百度map的html页面以供调用 功能包括了 ①展示底图 ②切换卫星图,切换卫星路线图,切换普通地图 ③通过 ...

  9. 发现一个百度的密码。。。记最近一段时间的php感想

    请看图. 突然想看一下百度的cookie. 最近百度一年真是多攒多难,我一直挺百度啊.百度文化就是程序员文化,但是收到中国其他文化的侵蚀,不得不变, 任何人重构系统,都会有大概百分三十左右的性能提升. ...

随机推荐

  1. Vue-router(1)之component标签

    1. 使用 <component>标签实现组件切换 <component> 是Vue提供的标签语法:有一个is属性,is的作用就是显示指定的组件 <template> ...

  2. ZOJ 1276 DP

    给出一系列的1x2的矩阵,要你求出矩阵以什么样的次序相乘才使得相乘次数最少,.(不用排序,只要决定该矩阵是和前面相乘比较好,还是后面). 今天仔细想了一下,跟之前做的DP题目做了下对比,你比如说猴子堆 ...

  3. 开始新建AEM站点-周末教程

    Getting Started Developing AEM Sites - WKND Tutorial 开始新建AEM站点-周末教程 The goal for this multi-part tut ...

  4. ccs-基础-阴影

    1.html代码 <div class="demo demo1">假如生活欺骗了你</div> <div class="demo demo2 ...

  5. 1.Redis简介/配置文件

    redis简介 redis使用入门 redis安装 http://www.runoob.com/redis/redis-install.html [root@yz---- bin]# ll total ...

  6. Vue专题-js常用指令

    vue.js官方给自己的定为是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍了vue.js的常用指令. vue.js常用指令 Vue.js使用方式及文本插值 Vue.js 使用了基于 HTML ...

  7. Golang解析json的几种方法

    Golang解析json的几种方法 概要 使用Golang调用其它平台API接口时总会被多层的json串给恶心到,我记录一下自己解析json的几种方法. 一.自带的json包 func JsonUnm ...

  8. 笔记本安装SSD固态硬盘详细的优化设置

    现在好多笔记本.台式机都加上固态硬盘了,固态硬盘的优势大家应该都有所了解了,在此略写一下固态硬盘优势:  1.启动快,没有电机加速旋转的过程:  2.不用磁头,快速随机读取,读延迟极小:  3.相对固 ...

  9. 【收藏】每天更新!全网热门公共BT种子 BitTorrent Tracker 列表合集

    每天更新!全网热门公共 BitTorrent Tracker 列表合集. 该项目仅将全网热门的公共 Tracker 列表制作成合集方便大家使用,无需再一个个导入了~. 「English」(tracke ...

  10. springBoot中mybatis错误之 Property 'configuration' and 'configLocation' can not specified with together 解决

    mybatis.config-location与mybatis.config-locations不同 mybatis.config-location不加载全局配置文件