关于手机软件“移动万年历”

Java 专栏收录该内容
0 篇文章 0 订阅
这个Java手机软件 “移动万年历”(MobCal)是我在4年前写的,先后做了测试版、1.0版和2.0版和最后的2.01版本,都是在中国Java手机网(www.cnjm.net)上免费发布的。目前网上最流行的版本是功能最完善的2.01版本,1.0版本的也有所流传。

当初发布时没想到时至今日这个软件竟颇为流行,几乎成了很多手机的“必装软件”。我想可能有以下几个原因:
1. 现在的手机速度和效率比4年前要强很多,因此我的这个万年历程序对于很多机型都是能流畅使用的。
2. 虽然我发布移动万年历时称它只为西门子M55和6688i等机型制作(因为条件有限我只用自己M55真机和6688i模拟器测试过),但事实上,我编写J2ME程序的自始至终都尽量使用最底层的API,因此,这就是为什么现在很多支持Java的手机都能使用移动万年历的原因。
3. 由于当初我是按照西门子M55和6688i等手机设计的,因此屏幕较小,对于如今很多较大屏幕的手机就不太兼容,很多用户反映“月历”的格子挤作一团。后来,网上有些懂Java的网友就将我的移动万年历2.01版进行了修改,将屏幕改大了,以适用于某些特定机型,如摩托罗拉的、三星的、蓝莓的一些手机。好像还有人特意将简体版本修改成繁体版本,以供港台用户使用。

然而让我遗憾的是,那些修改我的程序的人在发布程序的时候居然对我这个原作者只字不提。还有人在转发我的这个软件时将中文名字都改了,改成“移动万年通”,理由是他认为“它包罗的查询内容俱全”。也许,在盗版猖獗的时代,在淡薄的版权意识里原创作者的劳动是不值得被尊重的吧。可悲的是,有些地方他们改得并不好,以致于出现一些小bug,当用户反映出来后,他们也没有责任心和耐心去改正。要知道,我的2.01版的移动万年历使用了代码混淆,因此他们反编译之后的代码可读性是很差的。

这又不禁使我想起了一个类似的事情。某个研究周易玄学的网站,直接将我写的两个三千年万年历直接挂在其网站上(见 www.china95.net/wnl/ )。结果,有网友向站长指出“发现1600年前面的整百年2月份的全部天数都是29天的”,不符合现代公历历法规则,并建议站长修改代码。结果那个站长只能以“目前没有时间”搪塞推脱。其实,他是原封不动将我的程序“拿”过去的,根本就不知道程序的算法,又怎么懂得修改呢?其实,那个网友提出的问题不是bug,而是因为他们不懂得历法常识,因为1582年以前世界上通用的是儒略历,而不是现在的格里历。

总之,通过这些事情,我感觉“开源软件”事业在国内还有很长的路要走。


附录1

移动万年历MobCal 1.0的主要功能有:
    1.1900-2100二百年的阴阳历日期对照
    2.星期、时间显示
    3.生肖与星座
    4.详尽的公历和中国传统的纪念日
    5.年月日时的天干地支(即所谓八字或四柱)和相应的甲子纳音
    6.每日的二十八星宿
    7.历史纪元
    8.儒略日
    9.按阳历日期查询
    10.节令(如冬九九、夏三伏、梅雨等)和精确的节气交节时刻
    11.以节气交界的干支
    12.人体生物钟查询
    13.各种历制间的转换(年数不限)

    可能有些名词大家还不太熟悉,下面我就详细地予以介绍。

    首先,将MobCal.jab和MobCal.jar放到一个新建文件夹MobCal下面,然后将文件夹MobCal放到M55文件夹/java/jam/下。然后进入M55的“游戏与其他”,就会找到MobCal程序,选择“开启”,就进入到“请稍候”的界面,大约过15秒钟左右(这个时间可能有点长,主要是因为万年历涉及到许多浮点级别的运算,不过同M55自带的几个游戏和程序来说这个时间还是可以容忍的了),就会看到一个很别致的显示进度条Loading画面,接着屏幕上就显示出今天此刻的基本时间信息,具体包括历制(具体意义见下文),阳历和阴历日期,星期,生肖,公历和传统纪念日,名人诞辰,星座,年月日时的天干地支(即所谓八字或四柱)和相应的甲子纳音(这些相信对于易学和预测学爱好者来说是非常有用的),二十八星宿,儒略日(具体意义见下文)以及历史纪元。

MobCal 1.0还有其他一些高级功能。按左软键调出菜单,它们依次是:

    1.关于...

    版权信息和相关申明

    2.跳至日期...

    选择之后可以进入阳历日期的输入界面,你可以查询1900-2100这二百年间的任一阳历日期的详细信息。如果你的日期输入超出范围(如输入1800年)或不正确(如2000年2月30日)都会出现错误提示并让你重新输入。

    3.恢复日期

    将你跳转之后的日期重新设置成今天此刻的日期。

    4.节气节令

    节令就是指显示如冬九九、夏三伏、入梅、出梅等与节气气候有关的日子提示,节气就是指二十四节气,并且MobCal能给出精确到分钟的交节时刻,这是许多电子万年历无法做到的。

    正是由于节气计算精度很高,而手机的CPU和内存有限,J2ME又不支持浮点运算,所以使得节气节令的计算耗时较长,幸亏作者制作了MobCal的进度提示画面,这多少会缓解使用时的骄躁。

    5.干支(节气交界)

    懂得一点易学的朋友都知道,严格正统的年干支是以立春为分界线的而不是以农历新年分界的,而月干支是以二十四节气中的中气为分界线的而不是以农历新月分界的。之所以将节气交界的干支拿到菜单里面来,大概是因为象易学爱好者那样真正对干支“较真”的人毕竟不是多数,而且计算节气交界的干支也比较耗时间。

    6.人体生物钟

    这大概是许多使用者最感兴趣的内容了,只要输入您的出生日期,您就可以及时查到每天自己的体力、智力和情绪指数,相信会对您安排好自己的学习工作和生活有帮助。

    7.历制转换

    阳历类型有三种:现行的公历,格里历和儒略历。在公历1582-10-4以前;公历与儒略历一致,在公历1582-10-15以后,公历与格里历一致;而公历的1582-10-5和1582-10-14这十天由于历史原因而被删掉了!

    MobCal 1.0提供上述三种历制日期之间的任意转换,而且年份不限,你甚至可以输入公元前年份,但注意:0表示公元前1年,-1表示公元前2年,...-999表示公元前1000年等等。

    这个操作还能给出相应的历史纪元(目前只能查到隋朝),还有星期,日时干支,二十八星宿,儒略日等等信息。

    8.取消

    离开菜单回到主界面。

    9.帮助

    显示使用说明——当然不会有本文这么详细了 :)

    10.退出

    在退出画面中您又能看到进度条。

    期待着MobCal的下一个版本,届时除了速度会有提高和界面更美化外,更重要的是增添了许多人性化的东西,如可以自己添加纪念日,自己设置倒计时提醒,日记或记事功能。另外,农历会不止二百年,甚至可以达到数千年——只要手机内存允许。

    附:儒略日

    这在天文学和某些领域上有用,就是指当前日期到儒略历公元前4713年1月1日格林尼治时间正午12时的天数(可以为小数),MobCal的儒略日精确到时。

 

附录2

移动万年历MobCal 2.01的下载地址是http://www.cnjm.net/newpage/soft.php?id=808,下面我就介绍一下移动万年历MobCal 2.01版的功能和使用。

    首先申明一点,不论是移动万年历MobCal的1.0还是2.0版本,都是离线版的,不需要上网下载数据的——因为所有的信息都是我通过编写公式计算出来的,因为本人对天文历算很感兴趣,也“研究”多年了。
  
    移动万年历MobCal 2.01的主要功能有:
    1.1840-2100二百六十年的阴阳历日期对照 (正好从中国近代史开始,比一般万年历还多60年,

其实我可以做到3000年的,但担心运行速度会慢)
    2.星期、时间显示
    3.生肖与星座
    4.详尽的公历和中国传统的纪念日
    5.年月日时的天干地支(即所谓八字或四柱)和相应的甲子纳音
    6.每日的二十八星宿
    7.历史纪元
    8.儒略日
    9.按阳历日期查询
    10.节令(如冬九九、夏三伏、梅雨等)和精确的节气交节时刻
    11.以节气交界的干支
    12.人体生物钟查询
    13.各种历制间的转换(从公元前999年到公元后9999年,是名副其实的“万年历”了)

    MobCal 2.01与1.0版相比,增加的特色功能有:
    14.具有象M55自带的月历样式的浏览模式,而且能在上面显示农历,并且设有快捷键,可以逐月逐年翻阅。
    15.黄道吉时——严格参照《金函玉镜·日家奇门出行要决》编写,包括每日十二建星,喜神、财神、福神方位,各个时辰的黄道黑道和吉凶参断,还可以显示金函玉镜日家奇门转盘图,上面显示八卦方位、八门方位和飞宫九星布局等。
    16.人体生物钟查询时具有生日记忆功能,每次查询时自动记忆输入的生日,这样下次开机查询时就不用再输入生日了,十分方便。
    17.可以自己定制公历和农历的纪念日
    18.个性化定制倒计时提醒,可以在每次进入程序时显示你所设置的倒计时提醒,十分实用。
    19.进度百分比显示,以及进入推出画面
    20.十二星座的性格介绍



  • 0
    点赞
  • 15
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

jsf和jpa 期末大作业 <%@ page language="java" import="java.util.*,dao.*,entitybean.*" pageEncoding="utf-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <f:view> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> </style> </head> <body > <div style="position:absolute; width:100%; height:100%; z-index:-1;background-color:#2894FF;background-repeat : no-repeat;background-size:90% 90%;opacity:1"> <img src="image/re2.jpg"> <h3>人事信息管理</h3> <p style="text-align:center"> <h:outputLink value="/faces/add.jsp">添加一条</h:outputLink> <h:form> <h:dataTable value="#{loginBean.persons}" var="person" border="5" cellpadding="5" cellspacing="2"> <h:column> <f:facet name="header"> <h:outputText id="headerText1" value="职工号"/> </f:facet> <h:outputText value="#{person.id}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText2" value="姓名"/> </f:facet> <h:outputText value="#{person.name}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText3" value="性别"/> </f:facet> <h:outputText value="#{person.gender}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText4" value="年龄"/> </f:facet> <h:outputText value="#{person.age}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText5" value="国籍"/> </f:facet> <h:outputText value="#{person.address_country}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText6" value="详细地址"/> </f:facet> <h:outputText value="#{person.address_detail}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText7" value="邮编"/> </f:facet> <h:outputText value="#{person.address_zip}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText8" value="入职时间"/> </f:facet> <h:outputText value="#{person.entry_time}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText9" value="所属部门"/> </f:facet> <h:outputText value="#{person.depertment}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText10" value="职位"/> </f:facet> <h:outputText value="#{person.position}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText id="headerText11" value="工资"/> </f:facet> <h:outputText value="#{person.salary}"/> </h:column> <h:column> <h:outputLink value="faces/edit.jsp" > <h:outputText value="编辑"></h:outputText> <f:param name="p_id" value="#{person.id}"/> </h:outputLink> </h:column> <h:column> <h:outputLink value="delete.jsp" > <h:outputText value="删除"></h:outputText> <f:param name="p_id" value="#{person.id}"/> </h:outputLink> </h:column> </h:dataTable> </h:form> </p> <img src="image/re.jpg"> </div> </body> </html> </f:view>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值