下面是"Baidu百科"关于公历“闰年”词条的算法说明
“闰年是公历中的名词。
普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年);
世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
对于数值很大的年份,这年如果能被3200整除,并且能被172800整除则是闰年。如172800年是闰年,86400年不是闰年(因为虽然能被3200整除,但不能被172800整除)。
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1-12月分别为31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天)。”
根据上面算法用MySQL存储过程判断某个年份是否为闰年,请参考下列实验(注意:由于MySQL时间日期类型的年份取值范围为1000~9999,因此对于上述关于大数值年份的算法予以忽略)
-- 创建自定义存储函数”Is_Leap_Year“,用来判定某个年份是否为公历闰年
Drop Function if exists Is_Leap_Year
CREATE FUNCTION Is_Leap_Year (dt date) RETURNS Bit(1)
BEGIN
Declare result Bit
If Mod(Year(dt),400)=0 Or
(Mod(Year(dt),4)=0 And Mod(Year(dt),100)<>0) Then
Set result=1
Else
Set result=0
End If
RETURN result
END
-- 创建测试表并插入数据
Drop Table If Exists test
Create Table test
(id int auto_increment primary key,d1 DateTime)
Insert into test (d1) values
('2010-05-26'),('2011-06-16'),
('2012-07-23'),('2013-08-02'),
('2014-09-20'),('2015-10-27'),
('2016-11-24'),('2017-12-13')
-- 测试自定义函数Is_Leap_Year返回结果
select *,
AddDate(concat(year(d1),'-03-01'),-1)
as Last_Date_Feb_of_The_Year,
If(Is_Leap_Year(d1),'是','否')
as `Is_Leap_Year(d1)`
from test
实验截图
连接数据库的代码为了便于复用,你可以另外再写一个文件,把连接的代码放进去,比如你另一个文件叫做DbConnection.java,你把这个文件放到新建的一个包里。那么该文件下连接数据库就能这么做:public class DBConn {
private String driver="com.mysql.jdbc.Driver"//mysql的驱动程序
// allowMultiQueries=true 允许数据库一次执行多条sql语句
// 在url中加入characterEncoding=gb2312可以解决mysql数据库的中文查询和插入问题
private String url="jdbc:mysql://localhost/DatabaseName?characterEncoding=gb2312&allowMultiQueries=true"//DatabaseName是你的数据库的名字
private String user="root"//mysql数据库的用户名
private String password="123456"//密码
private Connection conn=null
private Statement stmt=null
/**
* 在构造函数中连接数据库
*/
public DBConn(){
try{
Class.forName(driver)
conn=DriverManager.getConnection(url,user,password)
}catch(Exception e){
System.out.println(e.toString())
}
}
}
这个函数是通用的,另外,你要执行查询、删除、增加等 *** 作,也可以把这些增删查改的函数写在这个文件下面。
使用的时候就是在jsp页面用import引入,<import id="dbConn" class="包名.DbConnection">
然后用dbConn写就行。如果还不能理解,建议你查看一下相关的资料,就不是你写连接数据库的问题了。
万年历不难做。难得是数据,数据比较庞大啊。分析一下。你只需要考虑一下闰年。农历60年一个循环,
阴历阳历分开算,最后数据组合就是既有阴历又有阳历了。
同样,节气也是,做一个阴历节气表,一个阳历节气表。
做下对应就可以了。
具体实现就不多说了。比较容易,你可以做基于web的也可以基于form的。开发语言可以用vs系列,java系列。如果是web的,可以用php,aspx,jsp。数据库用mysql就可以,mssql比较傻瓜容易上手。oracle的话没必要。
提供一个解决方案:
做基于web的。aspx+c#+ado.net+mssql
这样你就可以把工作重点放在算法实现上。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)