September 21, 2007

无所事事:做个google calendar的农历

      偶回来了!

      这两天有朋友lxltop说我比较懒, 就尽逗大家乐了, 原因就在今天揭秘。 我这两天在做google calendar 的中国农历。

      此言一出, 肯定绝倒一片, 大堆的人会在哪里鄙视说 google calendar 本来就有中国农历了, 再去做一个不是多此一举吗? 此言还真不差, 所以我的题目就取了个“无所事事”。

      中国农历比较麻烦的就是要把每年的日子都写出来, 如果是公历只要写个每年重复就ok了, 可农历不行啊。 什么时候我们也应该给自己立个标准, 让农历也可以循环, 并它加入到icalendar的标准中那就牛啦, 可目前没有就只有自己去写了。

      废话就不拉了, 反正我就写了一个连界面都没有的C程序, 然后能够生成10年的农历icalendar, 起始年份你可以自己选择, 总得跨度是200年, 因为网上只有200年的万年历数据, 区段 1901 - 2099。

      我写这个东西有一个目的, 就是每年不用往google calendar中自己去添加生日了, 可以直接有程序来生成农历生日, 然后直接导入到google中就可以用了。

      google calendar 导入icalendar的要求是(自己做个记录, 防止以后再忘记):

1、 icalendar文件必须是utf-8格式, 并且必须有utf-8的bom, 否则就是乱码一片, 这个是我试出来的。

2、 icalendar的每一个活动最多允许好像是200个时间点, 我曾经想把200年的万年历一次性导入到google calendar中, 发现不行。 最后试验得出是200个时间点, 所以我现在做的时间跨度是10年, 每年至少有12个农历月, 每月有一个“初一”、“初二”的日子, 这样相乘就会得到至少120个活动时间点。

      程序很垃圾的, 我也不少意思再说了, 用C生成了GB2312类型的icalendar文件, 然后再用iconv进行转码, 转成UTF-8的icalendar文件, 最后会在当面目录下生成utf8.ics文件, 直接把这个文件导入 google calendar 就可以了。

      程序还会自动产生二十四节气, 不过我不会用C来做二十四节气, 因为用到了一个UTCDATE, 是以1900年为起点的。 我没有在C下找到方法, 只能先用javascript生成一个200年的二十四节气时间表, 就是文件jieqi.txt, 然后在程序中用读取文件中相应的时间来生成二十四节气活动。

      程序就这样了, 很马虎的一个, 就玩玩而已, 大家有兴趣的可以自己下过去玩玩, 要自己改改的在重新编译一下就可以了, 我在DEV-CPP 4.9.9.2 下编译通过。

      最后说一个不知道的问题, 我把这个生成的中国农历导入 google calendar, 当我把时间跳到2016年的12月, 发现 google calendar 目前已经有的“中国节假日”中的冬至跟我生成的calendar的冬至是不一样的(目前只发现这一个)。 生成的冬至在21号, 而 google calendar 的冬至在22号, 我也不知道哪一个正确, 不过我用 nokia 1116 查到的农历跟我的一样, 也是在21号。

      好了, 我把东西最后都上传到divshare(点击下载)了, 想要玩玩的可以下下去。

      给个效果图, 结束文章。icalendar

  您喜欢本文吗?即刻订阅"偶爱偶家",精彩文章不再错过!现在就给我们留个话吗?

 

« 开心一刻:口误 开心一刻:考驾照中的笑话 »

Related Posts

  • this post have no related
11 responses to "无所事事:做个google calendar的农历"
fisio said:
2007年09月21日

主要是Google对农历不够重视,不然这玩意最合适的位置应该是上面,和 Google Doodles, 天气,月相那些并列,而不是每天一个全天事件,太扎眼了。我虽然有农历,但从来不让它显示,哈哈

枫叶 said:
2007年09月21日

其实做月相一样的不麻烦, 就是找几个图片就行了, 不过我做图片的工夫比较差劲, 晚上回去准备试试, 整个样子出来玩玩, 就可以把东西挪到上面去了.

lxltop said:
2007年09月21日

原来做正事去了,农历循环有想法,就觉得有点麻烦,我一般是把重要人的生日这些每年记一次的。

枫叶 said:
2007年09月22日

昨天把那个农历挪到上面去了, 其实就是一个图片, 不过google限制图片的长宽是16*16的, 所以几乎会很难看的, 我现在是把宽度16给取消了给出一个效果图.
http://www.yupoo.com/photos/zoom?id=ff808081152957f601152ae60fd31989

这样感觉是好看些, 不过google的16px的宽度限制根本没有用处了就.

每年添一次生日不觉得累的慌? 用农历循环一次生成岂不快捷很多?

vern said:
2007年09月22日

上次没看懂,今天就发现要用上,太爽了

Hi said:
2008年07月03日

正是需要的东西
有没有源代码?想拿来做重复的农历生日事件,现在的google日历就差这个就完美了,唉

2008年07月04日

源码应该是有的, 不过可能需要找一找, 还不知道能不能找到.

Hi reply:
2008年07月04日

呵呵,这个小问题有时候还真是很折磨人,不少朋友亲戚的生日是过农历的.

不过话说回来,google的这个问题不是被人一次两次诟病了,但好像完全没有想改的意图.

尝试过用outlook2003可以生成农历的重复事件,也可以用google提供的工具将其同步到google日历上去,但是同步上去之后,农历却变成了每年公历的重复.outlook2007更绝了,都不提供农历重复事件了.

[...]       前几天在北极冰仔的博客上看到了一题ACM - the drunk jailer, 突然有兴趣玩玩。 我已经从大学毕业之后就没有再碰过C语言这么个玩意了而已了(除了上次用C语言写了一个google calendar的东东外) [...]

ricky said:
2008年08月07日

有个软件叫:桌面日历秀,支持农历循环生日。我都是用这个软件记录农历生日的,大家可以试试。
可惜它不能像google calender 一样发送SMS

2008年08月10日

@ricky, 谢谢您的推荐, 不过我不是很喜欢桌面的东西, 无法随时随地查看. google推出了api, 其实可以通过自己写程序就得到农历循环的.

Leave a comment