自从看了冬奥会的开幕式,二十四节气的倒计时,祖国大好河山,美轮美奂,于是想搜索个图当壁纸。
作为一个有追求的程序员,更是个实用主义的人,要是壁纸上能加个日历就更好了。
将日历P上去?
小了,格局小了,作为程序员,我肯定是让程序生成一个的。
Flag是立了,草率了,活儿是挺多的。
得搞个万年历吧,看上去so easy!
不知道啥算法,百度里倒是能找出很多,五花八门。
后来,我查看了和万年历网页源码,反复研究了javascrip的实现方式。
leapDays:function(y) {
if(calendar.leapMonth(y)) {
return((calendar.lunarInfo[y-1900] & 0x10000)? 30: 29);
}
return(0);
},
其实,计算农历日期大多都是通过枚举日期数据的,而且大多都只能算到2050年。
作为优秀的程序员,我怎么可能满足于2050年,还说“万年”历呢!
好家伙,这水越趟越深了,直到我找到了一个较ephem的库。
以为很顺利的,谁知ephem这货是研究天文星体的。当然研究天文的东西,肯定可以算日期,包括农历天干地支等。
越看越糊涂,好想放弃,但是又不甘心,退回枚举的方法吧,又觉得太low了。
突然感觉自己是个倔强的程序员……
好了,在我日夜奋战努力专研攻克下,还真让我做出来了。
(中间省略1M个字……)
这么好的东西,取个名字吧,英文就叫CalendarWallpaper吧,缩写CalWp。
中文呢,万年历壁纸生成器,简称“万年壁”?呃……太俗了!
日历壁纸生成器,简称“日壁”?
……
算了,以后有灵感了再取名。
作为实用主义的优秀程序员,名字啥的都有点浮云。
先验证下功能!
1. 日历时间范围
我追求的目标是“上下五千年”,先挑几个时间点看看。
首先,来个大唐王朝的时间755年
还行嘛!
再来个《三体》世界里的年代,2205年水滴对地球舰队发起攻击。
其实,听说ephem可以算任意日期,我有点不信,不过我没验证出溢出问题。这个库有个儒略日的概念,儒略日起于公元前4713年。往后呢,都是推算的,反正我输入很长的年份都能得到结果……
2. 日历在壁纸的位置
为了适合各种小伙伴各种追求,支持九个位置。
程序输入对应位置名称即可匹配。
3. 壁纸大小问题
目前支持电脑的宽屏,1280*720,2K,4K甚至8K的图都能很好适配。
手机屏幕尺寸的呢?目前没有,计划适配。
竖屏壁纸自动适配还在研究中。
4. 日历的周数和周一还是周日是第一天问题
有小伙伴可能是项目管理人员,喜欢关注周数,即当前周是这年的第几周。
有,通通满足你。
不过这里周数的定义没有统一的标准,比如每年的1月1日算第几周问题?目前很多公司都不一样,尽管现在有个ISO-8601的标准。
不过没关系,我提供参数让你们选,你说1月1是第一周可以,定义为ISO的标准也行。
来,我们先看看效果;
下图左边日历效果是将1月1日定为第一周,周一是每周的第一天的效;
右边日历是将1月1日定为ISO周数规则,并设置周日为一周的第一天的效果。
5. 色调和底色问题
有的软妹子程序媛喜欢淡淡的小清新壁纸,有的资深老手攻城狮喜欢深色神秘的壁纸。
都满足你们,这有两种色调四种配置。
这个配置解释比较废口水,看下图,你们对比下就能明白。
6. 在线壁纸适配
论壁纸,肯定有小伙伴会盯上Bing搜索主页的背景图,每日一图,还不重样。
这点小心思,我懂,通通安排。支持在线获取当天Bing主页图当壁纸。
还不满足?好了,除了当天的,昨天的前天的大前天的……通通支持(最大可支持向前6天图片)!
说了这么多,来个效果图看看
7. 显示整年日历
通过--wholeyear选项可以输出整年日历壁纸(需要V1.1版本或以上才支持),例如
CalWp.exe --wholeyear --dispwk --wknum=1
可以得到以下效果壁纸
8.横向日历显示
通过--horizon选项可以输出横向日历壁纸(需要V1.2版本或以上才支持),例如
CalWp.exe --horizon -i pic.jpg --anchor=top
可以得到以下效果壁纸
9. 如何获得这个软件
上面说的天花乱坠的,要亲自试试才真的知道好不好。
那么,怎么获得这个软件呢?
关注公众号“嵌入式软件实战派”,聊天界面回复“CalWp"或者”日历壁纸“即可获得下载链接。
或者通过点击该CSDN链接[CalendarWallpaper日历壁纸]下载。
8. 注意事项
日历壁纸生成软件开放给大家做学习研究使用,未经允许,不得挪作他用。
制作的壁纸也要注意图片版权问题,不要乱做商业用途哦。
如果你有其他疑问、建议或者其他奇思妙想,可以在公众号对话框留言,或者发邮件给我。