﻿<?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-静以修心</title><link>http://www.blogjava.net/kohri/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:01:15 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:01:15 GMT</pubDate><ttl>60</ttl><item><title>JAVA 简单的日期封装类</title><link>http://www.blogjava.net/kohri/archive/2012/04/25/376635.html</link><dc:creator>kohri</dc:creator><author>kohri</author><pubDate>Wed, 25 Apr 2012 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/kohri/archive/2012/04/25/376635.html</guid><wfw:comment>http://www.blogjava.net/kohri/comments/376635.html</wfw:comment><comments>http://www.blogjava.net/kohri/archive/2012/04/25/376635.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kohri/comments/commentRss/376635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kohri/services/trackbacks/376635.html</trackback:ping><description><![CDATA[本来以为有了date4j就万事无休了，结果在工作的时候发觉有不少脚步仅仅需要两三个简单的class执行一下就可以完成任务了。也就是说即使是date4j，相对于这两三个甚至是一个class来说还是过于臃肿了。于是乎自己写了个简单的日期封装类。<br />主要功能是 <br />1.获取当前时间<br />2.获取当前年，月，日，时，分，秒<br />3.获取指定日期的年，月，日，时，分，秒<br />4.获取两个日期的时间差(包括年月日时分秒)<br />5.将字符窜类型转成java.util.date类型<br />6.指定日期添加时间<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.kohri.date;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.text.DateFormat;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.text.ParseException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.text.SimpleDateFormat;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Calendar;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Date;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.GregorianCalendar;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;@descriped&nbsp;a&nbsp;simple&nbsp;class&nbsp;for&nbsp;date<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;Kohri<br />&nbsp;*&nbsp;@date&nbsp;2012/4/22<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@version</span><span style="color: #008000; ">&nbsp;1.0<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;SimpleDate&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;defaultFormat&nbsp;=&nbsp;"yyyy-MM-dd&nbsp;HH:mm:ss";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;SimpleDateFormat&nbsp;sf&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Calendar&nbsp;cal&nbsp;=&nbsp;Calendar.getInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Date&nbsp;date&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;current&nbsp;date&nbsp;time&nbsp;(default&nbsp;'yyyy-MM-dd&nbsp;HH:mm:ss')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;getDateNow()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sf&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SimpleDateFormat(defaultFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;currentTime&nbsp;=&nbsp;"";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentTime&nbsp;=&nbsp;sf.format(<span style="color: #0000FF; ">new</span>&nbsp;Date());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;year&nbsp;(default&nbsp;now)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getYear(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentYear&nbsp;=&nbsp;cal.get(Calendar.YEAR);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentYear;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;mon&nbsp;(default&nbsp;now)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getMonth(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentMonth&nbsp;=&nbsp;cal.get(Calendar.MONTH)&nbsp;+&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentMonth;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;day&nbsp;of&nbsp;month&nbsp;(default&nbsp;now)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getDay(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentDayOfMonth&nbsp;=&nbsp;cal.get(Calendar.DAY_OF_MONTH);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentDayOfMonth;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;hours&nbsp;(default&nbsp;now)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getHours(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentHours&nbsp;=&nbsp;cal.get(Calendar.HOUR_OF_DAY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentHours;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;&nbsp;minutes&nbsp;(default&nbsp;now)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getMinutes(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentMinute&nbsp;=&nbsp;cal.get(Calendar.MINUTE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentMinute;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;seconds&nbsp;(default&nbsp;now)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;int&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getSeconds(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;currentSecond&nbsp;=&nbsp;cal.get(Calendar.SECOND);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;currentSecond;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;string&nbsp;change&nbsp;to&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strDate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;dateFormat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Date&nbsp;toDate(String&nbsp;strDate,&nbsp;String&nbsp;dateFormat){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(strDate&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;||&nbsp;strDate.length()&nbsp;==&nbsp;0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SimpleDateFormat(dateFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date&nbsp;=&nbsp;df.parse(strDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(ParseException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;date;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;this&nbsp;Calendar's&nbsp;time&nbsp;value&nbsp;in&nbsp;milliseconds<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;p_date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getMillisOfDate(Date&nbsp;date)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal.setTime(date);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cal.getTimeInMillis();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;compare&nbsp;two&nbsp;date&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;return&nbsp;the&nbsp;greater&nbsp;date&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;if&nbsp;equals&nbsp;return&nbsp;null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strStartDate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strEndDate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;date&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Date&nbsp;getGreaterDate(String&nbsp;strStartDate,&nbsp;String&nbsp;strEndDate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;startDate&nbsp;=&nbsp;toDate(strStartDate,&nbsp;"yyyy-MM-dd");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;endDate&nbsp;=&nbsp;toDate(strEndDate,&nbsp;"yyyy-MM-dd");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;startTime&nbsp;=&nbsp;getMillisOfDate(startDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;endTime&nbsp;=&nbsp;getMillisOfDate(endDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((startTime&nbsp;-&nbsp;endTime)&nbsp;&gt;&nbsp;0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;startDate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>((endTime&nbsp;-&nbsp;startTime)&nbsp;&gt;&nbsp;0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;endDate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;date;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;days&nbsp;between&nbsp;2&nbsp;different&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strStartDate&nbsp;less&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strEndDate&nbsp;greater&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getDaysOftwoDiffDate(String&nbsp;strStartDate,&nbsp;String&nbsp;strEndDate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;startDate&nbsp;=&nbsp;toDate(strStartDate,&nbsp;"yyyy-MM-dd");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;endDate&nbsp;=&nbsp;toDate(strEndDate,&nbsp;"yyyy-MM-dd");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;startTime&nbsp;=&nbsp;getMillisOfDate(startDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;endTime&nbsp;=&nbsp;getMillisOfDate(endDate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;betweenDays&nbsp;=&nbsp;(<span style="color: #0000FF; ">long</span>)&nbsp;((endTime&nbsp;-&nbsp;startTime)&nbsp;/&nbsp;(&nbsp;1000&nbsp;*&nbsp;60&nbsp;*&nbsp;60&nbsp;*&nbsp;24&nbsp;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;betweenDays;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;weeks&nbsp;between&nbsp;2&nbsp;different&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strStartDate&nbsp;less&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strEndDate&nbsp;greater&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getWeeksOfTwoDiffDate(String&nbsp;strStartDate,&nbsp;String&nbsp;strEndDate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;getDaysOftwoDiffDate(strStartDate,&nbsp;strEndDate)&nbsp;/&nbsp;7;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;months&nbsp;between&nbsp;2&nbsp;different&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strStartDate&nbsp;less&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strEndDate&nbsp;greater&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getMonthsOfTwoDiffDate(String&nbsp;strStartDate,&nbsp;String&nbsp;strEndDate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;getDaysOftwoDiffDate(strStartDate,&nbsp;strEndDate)&nbsp;/&nbsp;30;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;get&nbsp;years&nbsp;between&nbsp;2&nbsp;different&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strStartDate&nbsp;less&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;strEndDate&nbsp;greater&nbsp;date&nbsp;(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getYearsOfTwoDiffDate(String&nbsp;strStartDate,&nbsp;String&nbsp;strEndDate){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;getDaysOftwoDiffDate(strStartDate,&nbsp;strEndDate)&nbsp;/&nbsp;365;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;add&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;count&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;field&nbsp;Calendar.YEAR(MONTH<img src="http://www.blogjava.net/Images/dot.gif" alt="" />..)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;format&nbsp;DateFormat(yyyy-MM-dd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;addDate(Date&nbsp;date,<span style="color: #0000FF; ">int</span>&nbsp;count,<span style="color: #0000FF; ">int</span>&nbsp;field,String&nbsp;format){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal.setTime(date);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;year&nbsp;=&nbsp;getYear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;month&nbsp;=&nbsp;getMonth()&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;day&nbsp;=&nbsp;getDay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;hours&nbsp;=&nbsp;getHours();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;minutes&nbsp;=&nbsp;getMinutes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;seconds&nbsp;=&nbsp;getSeconds();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calendar&nbsp;calendar&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;GregorianCalendar(year,&nbsp;month,&nbsp;day,&nbsp;hours,&nbsp;minutes,&nbsp;seconds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calendar.add(field,count);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SimpleDateFormat(format);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmpDate&nbsp;=&nbsp;df.format(calendar.getTime());<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(date == null){<div><span style="white-space:pre">		</span>cal.setTime(new Date());</div><div><span style="white-space:pre">	   </span>}else{</div><div><span style="white-space:pre">		</span>cal.setTime(date);</div><div><span style="white-space:pre">	   </span>}</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;tmpDate;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;calendar&nbsp;settime<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;date<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setCalTime(Date&nbsp;date){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(date&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal.setTime(date);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">setter&nbsp;getter</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;getDefaultFormat()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;defaultFormat;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setDefaultFormat(String&nbsp;defaultFormat)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDate.defaultFormat&nbsp;=&nbsp;defaultFormat;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Date&nbsp;getDate()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;date;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setDate(Date&nbsp;date)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDate.date&nbsp;=&nbsp;date;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setCalTime(date);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}</div><img src ="http://www.blogjava.net/kohri/aggbug/376635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kohri/" target="_blank">kohri</a> 2012-04-25 22:36 <a href="http://www.blogjava.net/kohri/archive/2012/04/25/376635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于date4j,简约的日期处理库(Java's Date Classes Must Die.)</title><link>http://www.blogjava.net/kohri/archive/2012/04/12/373885.html</link><dc:creator>kohri</dc:creator><author>kohri</author><pubDate>Wed, 11 Apr 2012 17:05:00 GMT</pubDate><guid>http://www.blogjava.net/kohri/archive/2012/04/12/373885.html</guid><wfw:comment>http://www.blogjava.net/kohri/comments/373885.html</wfw:comment><comments>http://www.blogjava.net/kohri/archive/2012/04/12/373885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kohri/comments/commentRss/373885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kohri/services/trackbacks/373885.html</trackback:ping><description><![CDATA[<p>&nbsp; &nbsp; &nbsp; 在熟悉公司业务代码的时候经常看见有日期处理（date）,由于项目转手次数较多，在这方面没合理封装处理好，于是就想自己封装一个date类。然而辗转了几天却发觉已经有date4j的存在，于是在这里简单地介绍一下这个日期类库。以下包括自己的代码、网上流传资料、以及date4j官网例子。 </p>
<p>-------------------------------------------------------------------------------------------------------------------------------------------------------------</p>
<p>java日期处理相关类：</p>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">java.util.Date&nbsp;<br />
java.sql.Date&nbsp;<br />
java.sql.Time&nbsp;<br />
java.sql.Timestamp&nbsp;<br />
java.util.Calendar&nbsp;<br />
java.util.TimeZone</div>
<p>&nbsp; &nbsp; &nbsp;比较常用的是java.util.date，将java.util.Date转为java.sql.Date的时候，日期时分秒会被去掉，失去精度。而且如果现在翻开api看看就发觉这两个类好多方法已经过时，几近沦为废物。</p>
<p>&nbsp; &nbsp; &nbsp;Timestamp能和java.util.date无损转换，但是在一些预定义sql中会常常出问题。</p>
<p>（以上出自&nbsp;<a href="http://lavasoft.blog.51cto.com/62575/224196" target="_blank">click me</a>）</p>
<p>--------------------------------------------------------------------------------------------------------------------------------------------------------------</p>
<div> Java本身的日期类在JDK1.0版本之后就再也没有更新过，同时还存在着一些众所周知的问题（例如1月从0开始，导致了很多月份差一的漏洞）。一份新的Java规范请求（JSR，Java Specification Request）已经被提交，目的就是要解决上述问题，此版本的类库仍处在Alpha版本。在其稳定之前，很多开发者还是会使用Joda Time类库，该类库与JSR-310的参考实现类似（但不完全相同）。 Date4j为在Java中处理日期提供了一套新的解决方案，但与Joda Time所关注的范围完全不同。对比如下：<br />
<br />
<table style="color: #000000; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; " border="1" width="720">
     <tbody>
         <tr>
             <th width="271">Joda Time</th><th width="330">Date4j</th>
         </tr>
         <tr>
             <td style="font-size: small; ">拥有的类的数量:&nbsp;<a href="http://joda-time.sourceforge.net/api-release/index.html" style="color: #0b59b2; ">140+</a></td>
             <td style="font-size: small; ">拥有的类的数量<a href="http://www.date4j.net/javadoc/index.html" style="color: #0b59b2; ">&lt; 10</a></td>
         </tr>
         <tr>
             <td style="font-size: small; ">包含可变和不可变类</td>
             <td style="font-size: small; ">仅包含不可变类</td>
         </tr>
         <tr>
             <td style="font-size: small; ">强调速度和功能</td>
             <td style="font-size: small; ">强调简单和有效</td>
         </tr>
         <tr>
             <td style="font-size: small; ">支持格里高里历（Gregorian）、 科普特语日历（Coptic）、 伊斯兰教历（Islamic）、佛历（Buddhist）等等</td>
             <td style="font-size: small; ">只提供对格里高里历的支持</td>
         </tr>
         <tr>
             <td style="font-size: small; ">可以完全取代JDK日期类</td>
             <td style="font-size: small; ">和JDK日期类配合使用</td>
         </tr>
         <tr>
             <td style="font-size: small; ">精确到毫秒级操作</td>
             <td style="font-size: small; "><strong>支持到纳秒（十亿分之一秒）级操作</strong></td>
         </tr>
         <tr>
             <td style="font-size: small; ">修复了天&#8220;溢出&#8221;的问题</td>
             <td style="font-size: small; "><strong>天&#8220;溢出&#8221;的问题可配置</strong></td>
         </tr>
         <tr>
             <td style="font-size: small; ">针对的是通常意义的日期维护</td>
             <td style="font-size: small; ">适用于通过数据库来维护的日期</td>
         </tr>
         <tr>
             <td style="font-size: small; ">采用Apache 2.0授权许可</td>
             <td style="font-size: small; ">采用BSD授权许可</td>
         </tr>
     </tbody>
</table>
<br />
<p style="font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">虽然乍一看Date4j只具备了Joda中一部分的特性，但它有两个主要的特点是Joda所不具备的。</p>
<p style="font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">首先，Date4j的开发者<a target="_blank" href="http://www.date4j.net/#Joda" style="color: #0b59b2; ">宣称</a>类库不应莫名其妙地将日期截断。Joda只支持毫秒级的精度而且在将来<a target="_blank" href="http://joda-time.sourceforge.net/faq.html#submilli" style="color: #0b59b2; ">可能也不会改善</a>。一些数据库也已经有了更好的解决方案。比如流行的<a target="_blank" href="http://www.postgresql.org/" style="color: #0b59b2; ">PostgreSQL</a>数据库对时间戳精度就已经支持到<a target="_blank" href="http://www.postgresql.org/docs/9.1/static/datatype-datetime.html" style="color: #0b59b2; ">微秒级</a>（百万分之一秒）。Date4j可在处理日期时对精度毫无损伤。</p>
<p style="font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">第二个特征是日期&#8220;溢出&#8221;的问题，例如向某个日期增加一段时间后，日期落在下月的情况。最简单的例子就是在3月31日增加一个月的计算：</p>
<pre style="overflow-x: auto; overflow-y: auto; width: 730px; padding-top: 0px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; font-family: 'Courier New', Courier; font-size: 12px; line-height: 15px; color: #222222; margin-top: 0px; margin-bottom: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #efefef; border-right-color: #efefef; border-bottom-color: #efefef; border-left-color: #efefef; border-image: initial; background-color: #fafafa; ">DateTime dt = new DateTime("2011-03-31"); <br />
DateTime result = dt.plusMonths(1); (最新版本此方法应该已经被删除，只有plus(...)与plusDay())<br />
System.out.println(result.toString());</pre>
<p style="font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">当使用Joda Time时，会输出4月30日，但这也许并不是你想要的结果。</p>
<p style="font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">鉴于这种不确定性，Date4j为您提供了<a target="_blank" href="http://www.date4j.net/javadoc/hirondelle/date4j/DateTime.DayOverflow.html" style="color: #0b59b2; ">4种选择</a>：</p>
<table style="color: #000000; font-family: Lucida, 'Lucida Grande', Tahoma, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; " border="1" width="420">
     <tbody>
         <tr>
             <td style="font-size: small; ">1.</td>
             <td style="font-size: small; ">第一天</td>
         </tr>
         <tr>
             <td style="font-size: small; ">2.</td>
             <td style="font-size: small; ">最后一天（与Joda Time相同）</td>
         </tr>
         <tr>
             <td style="font-size: small; ">3.</td>
             <td style="font-size: small; ">日期顺延</td>
         </tr>
         <tr>
             <td style="font-size: small; ">4.</td>
             <td style="font-size: small; ">抛出异常</td>
         </tr>
     </tbody>
</table>
<br />
以上转自 <a href="http://www.infoq.com/cn/news/2011/12/date4j-vs-joda-time" target="_blank">click me</a><br />
-----------------------------------------------------------------------------------------------------------------------------------------------------------<br />
<br />
<a href="http://www.date4j.net/" target="_blank">date4j官网</a>&amp;&amp;实例：<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><br />
<span style="color: #0000FF; ">import</span>&nbsp;hirondelle.date4j.DateTime;<br />
<span style="color: #0000FF; ">import</span>&nbsp;hirondelle.date4j.DateTime.DayOverflow;<br />
<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.util.TimeZone;<br />
<br />
<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Date4jExamples&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date4jExamples&nbsp;examples&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Date4jExamples();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.currentDateTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.ageIfBornOnCertainDate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.daysTillChristmas();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.whenIs90DaysFromToday();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.dateDifference();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.whenIs3Months5DaysFromToday();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.hoursDifferenceBetweenParisAndPerth();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.weeksSinceStart();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.timeTillMidnight();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.imitateISOFormat();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.firstDayOfThisWeek();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examples.jdkDatesSuctorial();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;log(Object&nbsp;aMsg)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(String.valueOf(aMsg));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp; <span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取当前时间&nbsp;what&nbsp;is&nbsp;the&nbsp;current&nbsp;date-time&nbsp;in&nbsp;the&nbsp;JRE's&nbsp;default&nbsp;time&nbsp;zone<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Here&nbsp;are&nbsp;some&nbsp;practical&nbsp;examples&nbsp;of&nbsp;using&nbsp;the&nbsp;above&nbsp;formatting&nbsp;symbols:
<div>&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp; Format&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Output<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;YYYY-MM-DD hh:mm:ss.fffffffff a &nbsp;&nbsp; &nbsp;1958-04-09 03:05:06.123456789 AM<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;YYYY-MM-DD hh:mm:ss.fff a &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1958-04-09 03:05:06.123 AM<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;YYYY-MM-DD &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1958-04-09<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;hh:mm:ss.fffffffff &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 03:05:06.123456789<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;hh:mm:ss &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 03:05:06<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;YYYY-M-D h:m:s &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1958-4-9 3:5:6<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;WWWW, MMMM D, YYYY &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wednesday, April 9, 1958<br />
&nbsp;&nbsp; &nbsp; *&nbsp;&nbsp; &nbsp;WWWW, MMMM D, YYYY |at| D a &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Wednesday, April 9, 1958 at 3 AM<br />
&nbsp;&nbsp; &nbsp; *</div>
&nbsp;&nbsp;&nbsp;&nbsp; *----------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;---<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;currentDateTime()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;now&nbsp;=&nbsp;DateTime.now(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;now.format("YYYY-MM-DD&nbsp;hh:mm:ss");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("Current&nbsp;date-time&nbsp;in&nbsp;default&nbsp;time&nbsp;zone&nbsp;:&nbsp;"&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;Current&nbsp;date-time&nbsp;in&nbsp;default&nbsp;time&nbsp;zone&nbsp;:&nbsp;2012-04-12&nbsp;00:55:54</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;年龄计算&nbsp;what's&nbsp;the&nbsp;age&nbsp;of&nbsp;someone&nbsp;born&nbsp;may&nbsp;16,1995<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;ageIfBornOnCertainDate()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;birthdate&nbsp;=&nbsp;DateTime.forDateOnly(1995,&nbsp;5,&nbsp;16);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;age&nbsp;=&nbsp;today.getYear()&nbsp;-&nbsp;birthdate.getYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;getDayOfYear获取距离年初的总天数</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(today.getDayOfYear()&nbsp;&lt;&nbsp;birthdate.getDayOfYear())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;=&nbsp;age&nbsp;-&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("Age&nbsp;of&nbsp;someone&nbsp;born&nbsp;May&nbsp;16,&nbsp;1995&nbsp;is&nbsp;:&nbsp;"&nbsp;+&nbsp;age);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;Age&nbsp;of&nbsp;someone&nbsp;born&nbsp;May&nbsp;16,&nbsp;1995&nbsp;is&nbsp;:&nbsp;16</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;日期相距&nbsp;How&nbsp;many&nbsp;days&nbsp;till&nbsp;the&nbsp;next&nbsp;December&nbsp;25<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;daysTillChristmas()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;christmas&nbsp;=&nbsp;DateTime.forDateOnly(today.getYear(),&nbsp;12,&nbsp;25);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;result&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(today.isSameDayAs(christmas))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;do&nbsp;nothing</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(today.lt(christmas))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;today.numDaysFrom(christmas);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(today.gt(christmas))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;christmasNextYear&nbsp;=&nbsp;DateTime.forDateOnly(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;today.getYear()&nbsp;+&nbsp;1,&nbsp;12,&nbsp;25);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;today.numDaysFrom(christmasNextYear);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("Number&nbsp;of&nbsp;days&nbsp;till&nbsp;Christmas&nbsp;:&nbsp;"&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;Number&nbsp;of&nbsp;days&nbsp;till&nbsp;Christmas&nbsp;:&nbsp;257</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;What&nbsp;day&nbsp;is&nbsp;90&nbsp;days&nbsp;from&nbsp;today<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;whenIs90DaysFromToday()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("90&nbsp;days&nbsp;from&nbsp;today&nbsp;is&nbsp;:&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;today.plusDays(90).format("YYYY-MM-DD"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;90&nbsp;days&nbsp;from&nbsp;today&nbsp;is&nbsp;:&nbsp;2012-07-11</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;日期相差<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dateDifference()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DayOverflow.Abort&nbsp;result&nbsp;throw&nbsp;Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DayOverflow.Spillover&nbsp;result&nbsp;2011-05-01<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DayOverflow.LastDay&nbsp;result&nbsp;2011-04-30<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DayOverflow.FirstDay&nbsp;result&nbsp;2011-05-01<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;public&nbsp;enum&nbsp;DayOverflow&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**&nbsp;Coerce&nbsp;the&nbsp;day&nbsp;to&nbsp;the&nbsp;last&nbsp;day&nbsp;of&nbsp;the&nbsp;month.&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;LastDay,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&nbsp;/**&nbsp;Coerce&nbsp;the&nbsp;day&nbsp;to&nbsp;the&nbsp;first&nbsp;day&nbsp;of&nbsp;the&nbsp;next&nbsp;month.&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;FirstDay,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**&nbsp;Spillover&nbsp;the&nbsp;day&nbsp;into&nbsp;the&nbsp;next&nbsp;month.&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Spillover,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**&nbsp;Throw&nbsp;a&nbsp;RuntimeException.&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Abort;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;}</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumYears<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumMonths<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumDays<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumHours<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumMinutes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;aNumSeconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;positive,&nbsp;required,&nbsp;in&nbsp;range&nbsp;0<img src="http://www.blogjava.net/Images/dot.gif" alt="" />9999&nbsp;method&nbsp;plus(Integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aNumYears,&nbsp;Integer&nbsp;aNumMonths,&nbsp;Integer&nbsp;aNumDays,&nbsp;Integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aNumHours,&nbsp;Integer&nbsp;aNumMinutes,&nbsp;Integer&nbsp;aNumSeconds,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DayOverflow&nbsp;aDayOverflow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;dt&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DateTime("2011-03-31");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;result&nbsp;=&nbsp;dt.plus(0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;DayOverflow.Spillover);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("date&nbsp;difference&nbsp;:&nbsp;"&nbsp;+&nbsp;result.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;date&nbsp;difference&nbsp;:&nbsp;2011-05-01&nbsp;00:00:00</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;What&nbsp;day&nbsp;is&nbsp;3&nbsp;months&nbsp;and&nbsp;5&nbsp;days&nbsp;from&nbsp;today?&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;whenIs3Months5DaysFromToday()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;result&nbsp;=&nbsp;today.plus(0,&nbsp;3,&nbsp;5,&nbsp;0,&nbsp;0,&nbsp;0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime.DayOverflow.FirstDay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("3&nbsp;months&nbsp;and&nbsp;5&nbsp;days&nbsp;from&nbsp;today&nbsp;is&nbsp;:&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;result.format("YYYY-MM-DD"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;3&nbsp;months&nbsp;and&nbsp;5&nbsp;days&nbsp;from&nbsp;today&nbsp;is&nbsp;:&nbsp;2012-07-17</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Current&nbsp;number&nbsp;of&nbsp;hours&nbsp;difference&nbsp;between&nbsp;Paris,&nbsp;France&nbsp;and&nbsp;Perth,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Australia.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hoursDifferenceBetweenParisAndPerth()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;this&nbsp;assumes&nbsp;the&nbsp;time&nbsp;diff&nbsp;is&nbsp;a&nbsp;whole&nbsp;number&nbsp;of&nbsp;hours;&nbsp;other&nbsp;styles<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;are&nbsp;possible</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;paris&nbsp;=&nbsp;DateTime.now(TimeZone.getTimeZone("Europe/Paris"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;perth&nbsp;=&nbsp;DateTime.now(TimeZone.getTimeZone("Australia/Perth"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;result&nbsp;=&nbsp;perth.getHour()&nbsp;-&nbsp;paris.getHour();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(result&nbsp;&lt;&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result&nbsp;+&nbsp;24;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("Numbers&nbsp;of&nbsp;hours&nbsp;difference&nbsp;between&nbsp;Paris&nbsp;and&nbsp;Perth&nbsp;:&nbsp;"&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;Numbers&nbsp;of&nbsp;hours&nbsp;difference&nbsp;between&nbsp;Paris&nbsp;and&nbsp;Perth&nbsp;:&nbsp;6</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;How&nbsp;many&nbsp;weeks&nbsp;is&nbsp;it&nbsp;since&nbsp;Sep&nbsp;6,&nbsp;2010?&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;weeksSinceStart()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;startOfProject&nbsp;=&nbsp;DateTime.forDateOnly(2010,&nbsp;9,&nbsp;6);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;result&nbsp;=&nbsp;today.getWeekIndex()&nbsp;-&nbsp;startOfProject.getWeekIndex();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("The&nbsp;number&nbsp;of&nbsp;weeks&nbsp;since&nbsp;Sep&nbsp;6,&nbsp;2010&nbsp;:&nbsp;"&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;The&nbsp;number&nbsp;of&nbsp;weeks&nbsp;since&nbsp;Sep&nbsp;6,&nbsp;2010&nbsp;:&nbsp;83</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;How&nbsp;much&nbsp;time&nbsp;till&nbsp;midnight?&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;timeTillMidnight()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;now&nbsp;=&nbsp;DateTime.now(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;midnight&nbsp;=&nbsp;now.plusDays(1).getStartOfDay();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;result&nbsp;=&nbsp;now.numSecondsFrom(midnight);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("This&nbsp;many&nbsp;seconds&nbsp;till&nbsp;midnight&nbsp;:&nbsp;"&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;This&nbsp;many&nbsp;seconds&nbsp;till&nbsp;midnight&nbsp;:&nbsp;83046</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Format&nbsp;using&nbsp;ISO&nbsp;style.&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;imitateISOFormat()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;now&nbsp;=&nbsp;DateTime.now(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("Output&nbsp;using&nbsp;an&nbsp;ISO&nbsp;format:&nbsp;"&nbsp;+&nbsp;now.format("YYYY-MM-DDThh:mm:ss"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;Output&nbsp;using&nbsp;an&nbsp;ISO&nbsp;format:&nbsp;2012-04-12T00:55:54</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;firstDayOfThisWeek()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;firstDayThisWeek&nbsp;=&nbsp;today;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;start&nbsp;value</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;todaysWeekday&nbsp;=&nbsp;today.getWeekDay();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;SUNDAY&nbsp;=&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(todaysWeekday&nbsp;&gt;&nbsp;SUNDAY)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;numDaysFromSunday&nbsp;=&nbsp;todaysWeekday&nbsp;-&nbsp;SUNDAY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstDayThisWeek&nbsp;=&nbsp;today.minusDays(numDaysFromSunday);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("The&nbsp;first&nbsp;day&nbsp;of&nbsp;this&nbsp;week&nbsp;is&nbsp;:&nbsp;"&nbsp;+&nbsp;firstDayThisWeek);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;The&nbsp;first&nbsp;day&nbsp;of&nbsp;this&nbsp;week&nbsp;is&nbsp;:&nbsp;2012-04-08</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;For&nbsp;how&nbsp;many&nbsp;years&nbsp;has&nbsp;the&nbsp;JDK&nbsp;date-time&nbsp;API&nbsp;been&nbsp;suctorial?&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;jdkDatesSuctorial()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;today&nbsp;=&nbsp;DateTime.today(TimeZone.getDefault());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;jdkFirstPublished&nbsp;=&nbsp;DateTime.forDateOnly(1996,&nbsp;1,&nbsp;23);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;result&nbsp;=&nbsp;today.getYear()&nbsp;-&nbsp;jdkFirstPublished.getYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("The&nbsp;number&nbsp;of&nbsp;years&nbsp;the&nbsp;JDK&nbsp;date-time&nbsp;API&nbsp;has&nbsp;been&nbsp;suctorial&nbsp;:&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;result&nbsp;The&nbsp;number&nbsp;of&nbsp;years&nbsp;the&nbsp;JDK&nbsp;date-time&nbsp;API&nbsp;has&nbsp;been&nbsp;suctorial&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;16</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
</div>
<img src ="http://www.blogjava.net/kohri/aggbug/373885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kohri/" target="_blank">kohri</a> 2012-04-12 01:05 <a href="http://www.blogjava.net/kohri/archive/2012/04/12/373885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>array_push 效率测试</title><link>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html</link><dc:creator>kohri</dc:creator><author>kohri</author><pubDate>Wed, 04 Apr 2012 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html</guid><wfw:comment>http://www.blogjava.net/kohri/comments/373323.html</wfw:comment><comments>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kohri/comments/commentRss/373323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kohri/services/trackbacks/373323.html</trackback:ping><description><![CDATA[在php中数组赋值的时候用array[]这种方法效率会较高于array_push()，于是乎各种缘由就有了下面的测试<br />
测试代码：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*数组性能测试<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*for循环遍历测试函数有性能影响所以没有用，不同时调用2个函数也是担心具有影响，不封装同时执行代码是具有影响的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*测试是更改$count参数（从10~100000&nbsp;整取递增）和调用方法手动刷新，记录时间为平均大概时间<br />&nbsp;&nbsp;&nbsp;&nbsp;*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;arrayTest01(</span><span style="color: #800080;">$count</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;arrayTest01(</span><span style="color: #800080;">$count</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$arr</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$array</span><span style="color: #000000;">[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;(</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;arrayTest02(</span><span style="color: #800080;">$count</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$arr</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">array_push</span><span style="color: #000000;">(</span><span style="color: #800080;">$arr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;(</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #000000;">?&gt;</span></div><br />
效率大概是array[]快将近一倍，测试环境是ubuntu 11 和 windows 7<br />
<br />
<br />
<div>windows<span style="white-space: pre;">	</span>php-5.2.17/ Apache2.2<span style="white-space: pre;"> </span></div>
<div>times（$count） &nbsp; &nbsp; 10<span style="white-space: pre;">           </span>100<span style="white-space: pre;">             </span>1000<span style="white-space: pre;">           </span>10000<span style="white-space: pre;">　　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100000<span style="white-space: pre;">　　　</span>&nbsp;&nbsp;&nbsp; 1000000<span style="white-space: pre;">	</span></div>
<div>array[]<span style="white-space: pre;">               </span>2.31E-05<span style="white-space: pre;">	</span>0.000104<span style="white-space: pre;">	</span>0.000867<span style="white-space: pre;">	</span>0.008417<span style="white-space: pre;">	</span>0.043666<span style="white-space: pre;">	</span>0.288323<span style="white-space: pre;">	</span></div>
<div>array_push &nbsp; &nbsp; &nbsp; &nbsp;2.79E-05<span style="white-space: pre;">	</span>0.000181<span style="white-space: pre;">	</span>0.001614<span style="white-space: pre;">	</span>0.014447<span style="white-space: pre;">	</span>0.055875<span style="white-space: pre;">	</span>0.491052<span style="white-space: pre;">	</span></div>
<div><span style="white-space: pre;"> </span> <span style="white-space: pre;">	</span> <span style="white-space: pre;">	</span> <span style="white-space: pre;">	</span> <span style="white-space: pre;"> </span></div>
<div>ubuntu11.04<span style="white-space: pre;">	</span>PHP 5.3.6/apache2.2 <span style="white-space: pre;"> </span></div>
<div>array[]<span style="white-space: pre;">              </span>1.91E-05<span style="white-space: pre;">	</span>7.70E-05<span style="white-space: pre;">	</span>0.000726<span style="white-space: pre;">	</span>0.007669<span style="white-space: pre;">	</span>0.040492<span style="white-space: pre;">	报错	</span></div>
<div>array_push &nbsp; &nbsp; &nbsp; &nbsp;2.50E-05<span style="white-space: pre;">	</span>1.26E-04<span style="white-space: pre;">	</span>0.001149<span style="white-space: pre;">	</span>0.013714<span style="white-space: pre;">	</span>0.056978<span style="white-space: pre;">	报错	</span></div>
<div><br />
这是官方网站上的说辞</div>
<div>Note: 如果用 array_push() 来给数组增加一个单元，还不如用 $array[] = ，因为这样没有调用函数的额外负担。<span style="white-space: pre;">	<br />
官网链接： </span></div>
<div><a href="http://cn.php.net/array_push" target="_bank">http://cn.php.net/array_push<span style="white-space: pre;">	</span></a><span style="white-space: pre;"> </span></div>
<div></div><img src ="http://www.blogjava.net/kohri/aggbug/373323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kohri/" target="_blank">kohri</a> 2012-04-04 18:01 <a href="http://www.blogjava.net/kohri/archive/2012/04/04/373323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Linux SSH远程文件/目录传输命令scp [转]</title><link>http://www.blogjava.net/kohri/archive/2012/04/02/373252.html</link><dc:creator>kohri</dc:creator><author>kohri</author><pubDate>Mon, 02 Apr 2012 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/kohri/archive/2012/04/02/373252.html</guid><wfw:comment>http://www.blogjava.net/kohri/comments/373252.html</wfw:comment><comments>http://www.blogjava.net/kohri/archive/2012/04/02/373252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kohri/comments/commentRss/373252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kohri/services/trackbacks/373252.html</trackback:ping><description><![CDATA[<div><h2>scp使用方法</h2> <h3>1、获取远程服务器上的文件</h3> <blockquote><p><em>scp -P 2222 root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz</em></p></blockquote> <p>上端口大写P 为参数，2222 表示更改SSH端口后的端口，如果没有更改SSH端口可以不用添加该参数。  root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net，:/root/lnmp0.4.tar.gz  表示远程服务器上的文件，最后面的/home/lnmp0.4.tar.gz表示保存在本地上的路径和文件名。</p> <h3>2、获取远程服务器上的目录</h3> <blockquote><p><em>scp -P 2222 -r root@www.vpser.net:/root/lnmp0.4/ /home/lnmp0.4/</em></p></blockquote> <p>上端口大写P 为参数，2222 表示更改SSH端口后的端口，如果没有更改SSH端口可以不用添加该参数。-r  参数表示递归复制（即复制该目录下面的文件和目录）；root@www.vpser.net  表示使用root用户登录远程服务器www.vpser.net，:/root/lnmp0.4/  表示远程服务器上的目录，最后面的/home/lnmp0.4/表示保存在本地上的路径。</p> <h3>3、将本地文件上传到服务器上</h3> <blockquote><p><em>scp -P 2222 /home/lnmp0.4.tar.gz </em><em>root@www.vpser.net:/root/lnmp0.4.tar.gz</em></p></blockquote> <p>上端口大写P 为参数，2222 表示更改SSH端口后的端口，如果没有更改SSH端口可以不用添加该参数。  /home/lnmp0.4.tar.gz表示本地上准备上传文件的路径和文件名。root@www.vpser.net  表示使用root用户登录远程服务器www.vpser.net，:/root/lnmp0.4.tar.gz 表示保存在远程服务器上目录和文件名。</p> <h3>4、将本地目录上传到服务器上</h3> <blockquote><p><em>scp -P 2222 -r /home/lnmp0.4/</em><em> root@www.vpser.net:/root/lnmp0.4/</em></p></blockquote> <p>上 端口大写P 为参数，2222 表示更改SSH端口后的端口，如果没有更改SSH端口可以不用添加该参数。-r  参数表示递归复制（即复制该目录下面的文件和目录）；/home/lnmp0.4/表示准备要上传的目录，root@www.vpser.net   表示使用root用户登录远程服务器www.vpser.net，:/root/lnmp0.4/  表示保存在远程服务器上的目录位置。</p> <h3>5、可能有用的几个参数 :</h3> <p>-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .</p> <p>-C 使能压缩选项 .</p> <p>-4 强行使用 IPV4 地址 .</p> <p>-6 强行使用 IPV6 地址 .</p></div><img src ="http://www.blogjava.net/kohri/aggbug/373252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kohri/" target="_blank">kohri</a> 2012-04-02 15:23 <a href="http://www.blogjava.net/kohri/archive/2012/04/02/373252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>