﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jojo's blog－－快乐忧伤都与你同在-文章分类-java info collection</title><link>http://www.blogjava.net/ruoyoux/category/35511.html</link><description>为梦想而来，为自由而生。
性情若水，风起水兴，风息水止，故时而激荡，时又清平……</description><language>zh-cn</language><lastBuildDate>Tue, 02 Jun 2009 19:25:14 GMT</lastBuildDate><pubDate>Tue, 02 Jun 2009 19:25:14 GMT</pubDate><ttl>60</ttl><item><title>遍历两个日期之间天数的算法</title><link>http://www.blogjava.net/ruoyoux/articles/279347.html</link><dc:creator>Blog of JoJo</dc:creator><author>Blog of JoJo</author><pubDate>Mon, 01 Jun 2009 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/ruoyoux/articles/279347.html</guid><wfw:comment>http://www.blogjava.net/ruoyoux/comments/279347.html</wfw:comment><comments>http://www.blogjava.net/ruoyoux/articles/279347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ruoyoux/comments/commentRss/279347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ruoyoux/services/trackbacks/279347.html</trackback:ping><description><![CDATA[<p>package pkg.chart; <br />
<br />
import java.text.ParseException; <br />
import java.text.SimpleDateFormat; <br />
import java.util.Calendar; <br />
import java.util.Date; <br />
<br />
public class Test { <br />
public static void main(String[] args) throws ParseException { <br />
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); <br />
Long startM = sdf.parse("2009-1-14").getTime(); <br />
Long endM = sdf.parse("2010-1-14").getTime(); <br />
long result = (endM - startM) / (24 * 60 * 60 * 1000); <br />
System.out.println("差:" + result + "天"); <br />
<br />
Date startDate = sdf.parse("2009-01-14"); <br />
Calendar startTime = Calendar.getInstance(); <br />
startTime.clear(); <br />
startTime.setTime(startDate); <br />
for (int i = 0; i &lt; (int)result;i++) { <br />
String str = startTime.get(Calendar.YEAR) + "-" <br />
+ startTime.get(Calendar.MONTH) + "-" <br />
+ startTime.get(Calendar.DAY_OF_MONTH); <br />
System.out.println(str); <br />
startTime.add(Calendar.DAY_OF_YEAR, 1); <br />
} <br />
} <br />
}<br />
<br />
<br />
package demo;</p>
<p>import java.text.ParseException;<br />
import java.text.SimpleDateFormat;<br />
import java.util.Calendar;<br />
import java.util.Date;<br />
import java.util.GregorianCalendar;</p>
<p>/**<br />
&nbsp;* 遍历两个日期之间天数的算法<br />
&nbsp;* <br />
&nbsp;*/<br />
public class MyTest {<br />
&nbsp;public static void main(String[] args) throws ParseException {<br />
&nbsp;&nbsp;String start = "2007-01-27";<br />
&nbsp;&nbsp;String end = "2008-03-04";<br />
&nbsp;&nbsp;//字符串转换成日期<br />
&nbsp;&nbsp;SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");<br />
&nbsp;&nbsp;Date startDate=format.parse(start);<br />
&nbsp;&nbsp;Calendar startTime=Calendar.getInstance();<br />
&nbsp;&nbsp;startTime.clear();<br />
&nbsp;&nbsp;startTime.setTime(startDate);<br />
&nbsp;&nbsp;int startYear = startTime.get(Calendar.YEAR);<br />
&nbsp;&nbsp;int startMonth = startTime.get(Calendar.MONTH);<br />
&nbsp;&nbsp;int startDay = startTime.get(Calendar.DAY_OF_MONTH);<br />
&nbsp;&nbsp;Date endDate=format.parse(end);<br />
&nbsp;&nbsp;Calendar endTime=Calendar.getInstance();<br />
&nbsp;&nbsp;endTime.clear();<br />
&nbsp;&nbsp;endTime.setTime(endDate);<br />
&nbsp;&nbsp;int endYear = endTime.get(Calendar.YEAR);<br />
&nbsp;&nbsp;int endMonth = endTime.get(Calendar.MONTH);<br />
&nbsp;&nbsp;int endDay = endTime.get(Calendar.DAY_OF_MONTH);<br />
&nbsp;&nbsp;System.out.println("注意西方的月份从0到11，中国的月份从1到12");<br />
&nbsp;&nbsp;System.out.println("下面输入的是中国的日期.注意其中的转换问题");<br />
&nbsp;&nbsp;System.out.println("start date : " + start);<br />
&nbsp;&nbsp;System.out.println("end date : " + end);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;int count = 0;<br />
&nbsp;&nbsp;for (int x = startYear; x &lt;= endYear; x++) {<br />
&nbsp;&nbsp;&nbsp;//罗马历法产生年份公元1582年<br />
&nbsp;&nbsp;&nbsp;int gregorianCutoverYear = 1582;<br />
&nbsp;&nbsp;&nbsp;boolean isLeapYear = x &gt;= gregorianCutoverYear ? <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((x%4 == 0) &amp;&amp; ((x%100 != 0) || (x%400 == 0))) : <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x%4 == 0);<br />
&nbsp;&nbsp;&nbsp;//判断是否是闰年<br />
&nbsp;&nbsp;&nbsp;//java方法<br />
&nbsp;&nbsp;&nbsp;//boolean isLeapYear = (new GregorianCalendar()).isLeapYear(x);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;String isBigYear = "是平年";<br />
&nbsp;&nbsp;&nbsp;if (isLeapYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;isBigYear = "是闰年";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;System.out.println(x + "年" + isBigYear);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//获取开始月的最大天数<br />
&nbsp;&nbsp;&nbsp;//java方法<br />
&nbsp;&nbsp;&nbsp;//SimpleDateFormat aFormat=new SimpleDateFormat("yyyy-MM-dd");<br />
&nbsp;&nbsp;&nbsp;//Date date = aFormat.parse(start);<br />
&nbsp;&nbsp;&nbsp;//Calendar time = Calendar.getInstance();<br />
&nbsp;&nbsp;&nbsp;//time.clear();<br />
&nbsp;&nbsp;&nbsp;//time.setTime(date);<br />
&nbsp;&nbsp;&nbsp;//int max=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数<br />
&nbsp;&nbsp;&nbsp;//System.out.println(max); <br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//获取开始月的最大天数；大月是1，3，5，7，8，10，12；小月是4，6，9，11；特殊月是2<br />
&nbsp;&nbsp;&nbsp;int max = 0;<br />
&nbsp;&nbsp;&nbsp;if (startMonth == 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (isLeapYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 29;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!isLeapYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 28;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (startMonth == 3 || startMonth == 5 || startMonth == 8 || startMonth == 10) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;max = 30;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (startMonth == 0 || startMonth == 2 || startMonth == 4 ||
startMonth == 6 || startMonth == 7 || startMonth == 9 || startMonth ==
11) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;max = 31;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//循环每个月<br />
&nbsp;&nbsp;&nbsp;//如果在日期范围内月份循环时自增到了一年的最后一个月就将月份初始化到一月份<br />
&nbsp;&nbsp;&nbsp;int y = 0;<br />
&nbsp;&nbsp;&nbsp;//如果是开始日期的第一个年的月数就从开始月数循环<br />
&nbsp;&nbsp;&nbsp;if (x == startYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;y = startMonth;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;for (; y &lt; 12; y++) {&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//获取当月的最大天数；大月是1，3，5，7，8，10，12；小月是4，6，9，11；特殊月是2<br />
&nbsp;&nbsp;&nbsp;&nbsp;max = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (y == 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (isLeapYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 29;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!isLeapYear) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 28;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (y == 3 || y == 5 || y == 8 || y == 10) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 30;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (y == 0 || y == 2 || y == 4 || y == 6 || y == 7 || y == 9 || y == 11) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max = 31;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int ty = y + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(x + "年" + ty + "月");<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//循环每一天<br />
&nbsp;&nbsp;&nbsp;&nbsp;int z = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果是开始日期的第一个月的天数就从开始天数循环<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (x == startYear &amp;&amp; y == startMonth) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z = startDay;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (; z &lt;= max; z++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( x + "年" + ty + "月" + z + "日");&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x == endYear &amp;&amp; y == endMonth &amp;&amp; z == endDay) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果已经遍历过了截至日期的最后月份就中止月份的循环<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (x == endYear &amp;&amp; y == endMonth) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println(start + " 到 " + end + " 的天数差：" + count);<br />
&nbsp;&nbsp;<br />
&nbsp;}</p>
}
<img src ="http://www.blogjava.net/ruoyoux/aggbug/279347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ruoyoux/" target="_blank">Blog of JoJo</a> 2009-06-01 11:10 <a href="http://www.blogjava.net/ruoyoux/articles/279347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java日期操作 及 Timer定时器</title><link>http://www.blogjava.net/ruoyoux/articles/236711.html</link><dc:creator>Blog of JoJo</dc:creator><author>Blog of JoJo</author><pubDate>Sun, 26 Oct 2008 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/ruoyoux/articles/236711.html</guid><wfw:comment>http://www.blogjava.net/ruoyoux/comments/236711.html</wfw:comment><comments>http://www.blogjava.net/ruoyoux/articles/236711.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/ruoyoux/comments/commentRss/236711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ruoyoux/services/trackbacks/236711.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; Date,这个大家都认识了，用于保存日期信息，但不推荐进行日期操作及初始化特定日期 </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calendar及其子类GregorianCalendar:日历类，日期操作，初始化特定日期。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;DateFormat及其子类SimpleDateformat: 日期格式化，日期的默认显示方式不适合中国人，所以需要格式化为中国人常用的格式来显示。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;取得当期日期,&nbsp;&nbsp;&nbsp; Date date=new Date();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp; 初始化特定日期:假设我们要得到日期为2006-10-27日的对象，需要按如下方式获得。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal = new&nbsp;&nbsp;&nbsp; GregorianCalendar(2006, 9, 27,0,0,0);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = cal.getTime();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意:date,getTime()取得的是当期时间的毫秒数,月份比实际的减1</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GregorianCalendar构造方法参数依次为：年，月-1，日，小时，分，秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp; 格式化为我们熟悉的方式显示：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH;mm:ss");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String chinesedate = format.format(date);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp; 日期 年，月，日，分，秒的取得</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal = Calendar.getInstance();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int year = cal.get(Calendar.YEAR);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int month=cal.get(Calendar.MONTH)+1;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int day = cal.get(Calendar.DAY_OF_MONTH);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int hour = cal.get(Calendar.HOUR_OF_DAY);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; minute = cal.get(Calendar.MINUTE);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int second = cal.get(Calendar.SECOND);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：月份，实际的月份要比Clendar得到的加1，因为java月份是从0~11 </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">2.日期基本操作</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; 得到两个日期相差的天数</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date endDate=..</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date startDate = ...</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; 相差天数 int days=(int) ((endDate.getTime()-startDate.getTime())/(1000*24*60*60)+0.5);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp; 得到某个月的天数</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal = Calendar.getInstance();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; int month=cal.getActualMaximum(Calendar.DAY_OF_MONTH);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;日期加1天</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal.add(Calendar.DATE, 1)；//日期加1天</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.YEAR,Calendar.MONTH,Calendar.WEEK_OF_YEAR),分别是年，月，周</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">3，java.sql,Date()和java.util.Date();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面我们说的都是java.util.Date类，java.sql.Date类是操作数据库用的日期类型</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; java.util.Date date=....</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date sqldate=new java.sql.Date(date.getTime());</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; 也可以这样：String date="2005-11-10";</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Date sqlDate=java.sql.Date.valueOf(date);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">4,定时器</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; a,编写类,实现TimeTask接口，定时执行的代码写入run()方法中</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; b.&nbsp;&nbsp;&nbsp; timer.schedule(TimeTask子类对象, 开始执行的日期, 周期);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp; 周期为毫秒数</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp; 例子:</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp; 类MyTask:</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.*;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public class MyTask extends TimerTask {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("MyTask 正在执行...");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp; 类TimerDemo:</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.Timer;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.Calendar;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.GregorianCalendar;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.Date;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public class TimerDemo {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Timer timer = new Timer();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyTask task = new MyTask();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal = new GregorianCalendar(2006, 9, 28, 12, 49, 0);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = cal.getTime();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("date :" + date.toLocaleString());</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timer.schedule(task, date, 1000);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">***********************************************************************************************</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">在某些时候, 我们需要实现这样的功能,某一程序隔一段时间执行一次,而这一事情由系统本身来完成,并不是人为的触发,我们一般可称此为定时器任务.</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">　　这类技术主要应用到那些需要进行后台整理数据的系统中,比如说数据仓储,数据挖掘等.</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">　　其实到Java中,实现起来是非常简单的,下面我们以每隔5秒钟打引一句"Hello world"为例：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.TimerTask; </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public class TimeTast extends TimerTask ...{</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">// 在这里写你要定时执行的方法</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public void run() ...</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">System.out.println("Hello World!"); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.Date; </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">import java.util.Timer; </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">/** *//**</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">* 定时器测试</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">* @author FeGe</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">*/</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public class Test ...{</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public void execute() ...{</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">Timer timer = new Timer(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">TimeTast myTimeTask = new TimeTast(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">Date date = new Date(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">long timestamp = 5000; </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">/** *//**</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">* myTimeTask 指定执行的线程 date 指定第一次日期执行的时间 timestamp 指定每格多久再次执行一次</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">*/</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">timer.schedule(myTimeTask, date, timestamp); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public static void main(String[] args) ...{</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">Test t = new Test(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">t.execute(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">　　一个最简单的定时器任务就算完成了。是不是太简单了点呢，其实就这么简单。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">**************************************************************************************************************</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现 javax.servlet.ServletContextListener接口，同时实现它的contextInitialized (ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个建立和销毁的过程，看了前面两个接口函数，就不容置疑的把建立的过程置入 contextInitialized，把销毁的过程置入contextDestroyed了。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器，示例代码如下所示（为考虑篇幅，仅提供部分代码供读者参考）：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">private java.util.Timer timer = null;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public void contextInitialized(ServletContextEvent event) {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">timer = new java.util.Timer(true);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">event.getServletContext().log("定时器已启动"); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">event.getServletContext().log("已经添加任务调度表");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public void contextDestroyed(ServletContextEvent event) {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">timer.cancel();</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">event.getServletContext().log("定时器销毁");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">} </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">以 上代码中, timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000)这一行为定时器调度语句，其中MyTask是自定义需要被调度的执行任务（在我的财政数据中心项目中就是报表计算引擎入口），从 java.util.TimerTask继承，下面会重点讲述，第三个参数表示每小时(即60*60*1000毫秒)被触发一次，中间参数0表示无延迟。 其它代码相当简单，不再详细说明。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">下面介绍MyTask的实现，上面的代码中看到了在构造MyTask时，传入了 javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入，因此需要重载MyTask的构造函数（其父 类java.util.TimerTask原构造函数是没有参数的）。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实 现调度任务每24小时被执行一次，还需要判断一下时钟点，以常量C_SCHEDULE_HOUR表示(晚上12点，也即0点)。同时为防止24小时执行下 来，任务还未执行完（当然，一般任务是没有这么长的），避免第二次又被调度以引起执行冲突，设置了当前是否正在执行的状态标志isRunning。示例代 码如下所示：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">private static final int C_SCHEDULE_HOUR = 0;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">private static boolean isRunning = false;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">private ServletContext context = null;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public MyTask(ServletContext context) {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">this.context = context;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">public void run() {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">Calendar cal = Calendar.getInstance(); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">if (!isRunning) { </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) { </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">isRunning = true; </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">context.log("开始执行指定任务");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">//TODO 添加自定义的详细任务，以下只是示例</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">int i = 0;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">while (i++ ＜ 10) {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">context.log("已完成任务的" + i + "/" + 10);</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">} </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">isRunning = false;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">context.log("指定任务执行结束"); </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">} </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">} else {</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">context.log("上一次任务执行还未结束");</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">}</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">} </span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">上面代码中"//TODO&#8230;&#8230;"之下四行是真正被调度执行的演示代码(在我的财政数据中心项目中就是报表计算过程)，您可以换成自己希望执行的语句。</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">到这儿，ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部署到您的Web工程中去，在您工程的web.xml配置文件中加入如下三行：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">＜listener＞</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">＜listener-class＞com.test.ContextListener＜/listener-class＞</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">＜/listener＞&nbsp;&nbsp;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">当然，上面的com.test得换成您自己的包名了。保存web.xml文件后，把工程打包部署到Tomcat中即可。任务会在每晚12点至凌晨1点之间被执行，上面的代码会在Tomcat的日志文件中记录如下：</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">2003-12-05 0：21：39 开始执行指定任务</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">2003-12-05 0：21：39 已完成任务的1/10</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">&#8230;&#8230;</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">2003-12-05 0：21：39 已完成任务的10/10</span></span></p>
<p style="text-indent: 2em"><span style="font-family: 方正姚体"><span style="font-family: 方正姚体">2003-12-05 0：21：39 指定任务执行结束</span></span></p>
<img src ="http://www.blogjava.net/ruoyoux/aggbug/236711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ruoyoux/" target="_blank">Blog of JoJo</a> 2008-10-26 15:18 <a href="http://www.blogjava.net/ruoyoux/articles/236711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>