用C#实现一个百度万年历
背景
命理学是对人生命运规律的探索,以人的各式各样的数字(出生年月日、姓名笔划等)来推测人的性格与命运并占卜推测未来会发生的事情。古今中外都有相关方面的理论,中国的周易系列就是探讨这方面的,还有八字命理、紫微斗数、七星命理和占星术等。 正所谓:谋事在人,成事在天。但倘若命理真是注定的,宇宙也将会失去前进的动力。因此命理学虽然存在一定的道理,但是只可用于趋吉避凶,若没有实际行动,那一切也都是枉然。
涉及到方方面面,这里我需要一个阳历农历换算的工具,毕竟我是自己动手主义,并不想花钱调用一些收费API。上网找了一些人写过的代码,同一天得出的干支也不尽相同,我估计他们都只是随便写一个,能换算出一个结果就行,也没有进行大量测试,而我们算命的时候,最怕的就是日子算错了,那一切就白搭了。
我们的目的是实现一个准确的换算,数据必须与如下所示的这个万年历一致:

这里非常感谢晶晶博主的文章:1900年至2100年公历、农历互转Js代码,很详尽,注释也很完整,我们以此为基准进行后续的实现。
实现步骤
将大牛写好的JS转换成C#代码,最主要的是solar2lunar函数。
访问"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={$year}年{$month}月&resource_id=6018&format=json",将year和month替换成需要查询的年月,获取每日的宜忌信息。这里仅有2008年至2020年的数据,其他的还没有更新。
从1900年1月1日到2100年12月31日,依次调用上述的函数和API接口,将数据写入SQLServer数据库中,方便后续的查询和其他实现,最终数据表如下所示:

关键点
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天,需要处理一下。

结束语
命理,是生命的道理。
“命运”包括两个含义,一是命,即由命主的八字所组成的一定的排列组合,由它所反映的吉或凶,福或祸,同一时辰那一瞬间同时落地的孩子,他们的命早已注定。二是运,即人一生所走过的每个阶段,家庭、社会、人事际遇的不同,成就了不同的个体。“命”和“运”的组合构成了千姿百态的人生“命运”。
很多人说,既然命是注定的,那算也是这个,不算也是这个命啊,那又何必算呢?就算你算的再准又有什么意义呢?岂不是浪费时间?
算命其实和体检颇有些相似之处。你的身体条件、有什么遗传基因、可能会在什么年纪导致什么疾病,这是先天带来的,是父母遗传的,DNA,嗯,以当前的科学解释是没办法改变的。那大家何必去医院检查身体呢?大可不必去啊,反正有遗传会得肝病的,始终会得肝病,有遗传会得心脏病的人,终归会得心脏病,又何必去检查呢?再说了,就算检查出来了,又有什么用呢?反正这些遗传病也不好治?可他们完全不明白,按时去医院体检,可以最大限度的调整好自己的身体状态,就算遗传病是不可避免的,但是起码医生可以帮助病人将发病的时间延后、或者减轻痛苦、甚至延长生命。
其实,这就是改运的一种表现。所以,同样的道理,我们算命的意义,就在于躲避、减轻人生道路上可能会出现的未知灾难。尽管因为受到先天条件的限制,完全改变命运是不可能的,但是在某一段路上改善一下却是完全可以做到的。
用C#实现一个百度万年历的更多相关文章
- 推荐一个百度网盘搜索工具www.sososo.me
推荐一个百度网盘搜索工具 http://www.sososo.me
- 用python写一个百度翻译
运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...
- HTML连载31-制作一个百度首页
一. 我们制作一个百度首页作为练习,可直接复制该代码保存后缀名为.html来查看 <!DOCTYPE html> <html lang="en"> < ...
- 面试一个百度T7程序员,一道简单的题没答上来!网友却都在吐槽面试官!
程序员面试时都考些什么? 一个面试官得意洋洋地说自己面了一个百度T7,出了一道coding题,结果对方连最长上升子序列都写不出来. 楼主本想嘲弄一下百度T7的代码水平低,没想到网友们炸开了锅,纷纷 ...
- 实现了一个百度首页的彩蛋——CSS3 Animation简介
在百度搜索中有这样一个彩蛋:搜索“旋转”,“跳跃”,“反转”等词语,会出现相应的动画效果(搜索“反转”后的效果).查看源码可以发现,这些效果正是通过CSS3的animation属性实现的. 实现这个彩 ...
- 使用python和selenium写一个百度搜索的case
今天练习的内容主要写了一个小功能,在百度上搜索某词汇,然后实现web上的back功能 代码如下: import unittest from selenium import webdriver from ...
- nw.js---开发一个百度浏览器
使用nw.js开发一个简单的百度浏览器就很简单了,只需要在配置里面写入: { // "main": "index.html", "main" ...
- 一个百度MAP导航的基础封装
项目中需要根据点击时候点击的内容,输入百度地图查找并展示规划等相关功能 于是封装了一个单独的百度map的html页面以供调用 功能包括了 ①展示底图 ②切换卫星图,切换卫星路线图,切换普通地图 ③通过 ...
- 发现一个百度的密码。。。记最近一段时间的php感想
请看图. 突然想看一下百度的cookie. 最近百度一年真是多攒多难,我一直挺百度啊.百度文化就是程序员文化,但是收到中国其他文化的侵蚀,不得不变, 任何人重构系统,都会有大概百分三十左右的性能提升. ...
随机推荐
- 算法应用杂谈-xgboost的偏差
一个小样本的cvr 估计问题中, 考虑用xgboost 模型. 发现结果的估计偏差很大. 仔细研究后, 发现现象: 迭代步数不多, 一般3,5步就停了. 预测的分数偏差很大, 分布不匀. pcoc很大 ...
- 关于阿里云的远程连接和轻型桌面(xfce4)安装
这里用的阿里云服务器是轻量应用服务器 先通过网页端的远程连接进入服务器,然后 安装xfce4 (1)先安装更新:apt-get update. (2)安装xrdp:输入apt-get install ...
- vue中在时间输入框中默认显示时间
<template> <card> <label>开始时间</label> <DatePicker v-model="startTime ...
- mysql not in 或 in 优化
在MySQL 中,not in 或in 优化思路, 利用left join 来优化,类似如下的查询方式: select id from a where id in (select id from b ...
- php抓取网站图片源码
<?php /*完成网页内容捕获功能*/ function get_img_url($site_name){ $site_fd = fopen($site_name, "r&q ...
- maven deploy到私服去掉时间戳
直接上代码在插件中的配置. <plugin> <artifactId>maven-war-plugin</artifactId> <version>3. ...
- Sort - Merge Sort
归并排序思想 归并排序时间复杂度分析 归并排序特点 归并排序实现 递归 #include <iostream> using namespace std; void merge(int *a ...
- gitKraken取消/关闭全屏
如果你找不到在哪里设置的 这是配置文件 注意 fullScreen 字段,改这个字段可以改变是不是全屏,改变之前先关闭软件, 文件目录 第二张图
- Celery架构
Celery 官方 # Celery 官网:http://www.celeryproject.org/ # Celery 官方文档英文版:http://docs.celeryproject.org/e ...
- polyA|ribo-minus|differentiated cell|Genetic heterogeneity
转录组 测量单cell,可以认为是一种细胞.细胞株也认为来自同一个细胞. 使用两种方法,找mRNA(polyA)及rmRNA(ribo-minus),然后取交集. 转录组受实验影响,比如小片段没得到. ...