﻿<?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-Collus-文章分类-JAVA</title><link>http://www.blogjava.net/Collus/category/44974.html</link><description>惜秦怀古</description><language>zh-cn</language><lastBuildDate>Thu, 29 Jul 2010 08:42:12 GMT</lastBuildDate><pubDate>Thu, 29 Jul 2010 08:42:12 GMT</pubDate><ttl>60</ttl><item><title>动态跟踪Java代码的执行状况工具--BTrace</title><link>http://www.blogjava.net/Collus/articles/320789.html</link><dc:creator>良帅</dc:creator><author>良帅</author><pubDate>Thu, 13 May 2010 05:00:00 GMT</pubDate><guid>http://www.blogjava.net/Collus/articles/320789.html</guid><wfw:comment>http://www.blogjava.net/Collus/comments/320789.html</wfw:comment><comments>http://www.blogjava.net/Collus/articles/320789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Collus/comments/commentRss/320789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Collus/services/trackbacks/320789.html</trackback:ping><description><![CDATA[非常强烈的推荐下BTrace这个工具，用了后不得不说太强大了，BTrace简单来说，就是能在不改动当前程序的情况下，运行时的去监控Java程序的
执行状况，例如可以做到内存状况的监控、方法调用的监控等等，官方网站上有非常多详细的例子，我不说太多，只在下面举一个简单的例子来说明它的作
用，BTrace的User Guide请见：<a href="http://kenai.com/projects/btrace/pages/UserGuide">http://kenai.com/projects/btrace/pages/UserGuide</a>。<br />
对于运行中的Java程序，尤其是出了问题的程序，会需要跟踪其执行状况，例如传入的参数是什么、执行了多少时间，返回的对象是什么，抛出了什么异常，传
统的做法只能是把程序改一遍，加上一堆log，一个例子来展示下用BTrace的情况下，怎么来跟踪一个方法的执行时间：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">@BTrace </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> MethodResponseTime {<br />    <br />    @TLS </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">long</span><span style="color: rgb(0, 0, 0);"> startTime;<br />    <br />    @OnMethod(clazz</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">类名</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,method</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">方法名</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> onCall(){<br />        println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">enter this method</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        startTime</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">timeMillis();<br />    }<br />    <br />    @OnMethod(clazz</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">类名</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,method</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">方法名</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,location</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">@Location(Kind.RETURN))<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> onReturn(){<br />        println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">method end!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        println(strcat(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Time taken ms</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,str(timeMillis()</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">startTime)));<br />    }<br />    <br />}</span></div>用btrace执行上面的代码，就可以动态的监控任意的目前运行的Java程序中某类的某方法的执行时间，执行上面代码的方式如下（jdk 6+）：<br />
btrace [pid] MethodResponseTime.class<br /><br />
还有例如获取调用参数、调用者的对象实例以及返回值等请参看User Guide。<br /><br />
btrace为了保持JVM运行的安全性，因此做了很多的限制，例如不能抛出异常、修改传入的参数的值、修改返回值等，基本是一个只读的动态分析代码运行
状况的工具，但仍然是非常的有用，其实现机制是attach api + asm +  instrumentation。<img src ="http://www.blogjava.net/Collus/aggbug/320789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Collus/" target="_blank">良帅</a> 2010-05-13 13:00 <a href="http://www.blogjava.net/Collus/articles/320789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util.concurrent多线程框架</title><link>http://www.blogjava.net/Collus/articles/320701.html</link><dc:creator>良帅</dc:creator><author>良帅</author><pubDate>Wed, 12 May 2010 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/Collus/articles/320701.html</guid><wfw:comment>http://www.blogjava.net/Collus/comments/320701.html</wfw:comment><comments>http://www.blogjava.net/Collus/articles/320701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Collus/comments/commentRss/320701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Collus/services/trackbacks/320701.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中。DougLea确实是一个牛人，能教书，能出书，能编码，不过这在国外还是比较普遍的，而国内的教授们就相差太远了。  一般的服务器都需要线程池，比如Web、FTP等服务器，不过它们一般都自己实现了线程池，比如以前介绍过的Tomcat、Resin和Jetty等，现在有了JDK5，我们就没有必要重复造车轮了，直接使用就可以，...&nbsp;&nbsp;<a href='http://www.blogjava.net/Collus/articles/320701.html'>阅读全文</a><img src ="http://www.blogjava.net/Collus/aggbug/320701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Collus/" target="_blank">良帅</a> 2010-05-12 14:50 <a href="http://www.blogjava.net/Collus/articles/320701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 时间操作大全</title><link>http://www.blogjava.net/Collus/articles/318152.html</link><dc:creator>良帅</dc:creator><author>良帅</author><pubDate>Tue, 13 Apr 2010 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/Collus/articles/318152.html</guid><wfw:comment>http://www.blogjava.net/Collus/comments/318152.html</wfw:comment><comments>http://www.blogjava.net/Collus/articles/318152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Collus/comments/commentRss/318152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Collus/services/trackbacks/318152.html</trackback:ping><description><![CDATA[
		<div align="center">
				<font style="background-color: rgb(255, 255, 255);">
						<font color="#ff0000">
								<span style="color: rgb(8, 116, 255);">
										<span style="font-size: 24pt;">
												<span style="font-family: 黑体;">Java 时间操作大全</span>
										</span>
								</span>
						</font>
				</font>
				<br />
				<font style="background-color: rgb(255, 255, 255);">
						<font color="#ff0000">
						</font>
				</font>
		</div>
		<font style="background-color: rgb(255, 255, 255);">
				<font color="#ff0000">
						<span style="color: rgb(8, 116, 255);">
								<br />
函数列表：<br /></span>
				</font>
		</font>
		<br />
		<font style="background-color: rgb(255, 255, 255);">
				<font color="#ff0000">
						<span style="color: rgb(8, 116, 255);">
								<br />
/**<br />
    * 获取现在时间<br />
    * <br />
    * @return 返回时间类型 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd HH:mm:ss<br /></font>    */</span>
				</font>
				<br />
		</font>public static Date getNowDate() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String dateString = formatter.format(currentTime);<br />
    ParsePosition pos = new ParsePosition(8);<br />
    Date currentTime_2 = formatter.parse(dateString, pos);<br />
    return currentTime_2;<br />
}<br /><br /><font style="background-color: rgb(255, 255, 255);"><font color="#ff0000"><span style="color: rgb(8, 116, 255);">/**<br />
    * 获取现在时间<br />
    * <br />
    * @return返回短时间格式 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd</font><br />
    */</span></font><br /></font>public static Date getNowDateShort() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    String dateString = formatter.format(currentTime);<br />
    ParsePosition pos = new ParsePosition(8);<br />
    Date currentTime_2 = formatter.parse(dateString, pos);<br />
    return currentTime_2;<br />
}<br /><br /><p><font color="#ff0000"><span style="color: rgb(8, 116, 255);">/**<br />
    * 获取现在时间<br />
    * <br />
    * @return返回字符串格式 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd HH:mm:ss</font><br />
    */</span><br /></font>public static String getStringDate() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String dateString = formatter.format(currentTime);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 获取现在时间<br />
    * <br />
    * @return 返回短时间字符串格式<font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd</font><br />
    */</font><br />
public static String getStringDateShort() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    String dateString = formatter.format(currentTime);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 获取时间 小时:分;秒 <font style="background-color: rgb(255, 255, 0);">HH:mm:ss</font><br />
    * <br />
    * @return<br />
    */</font><br />
public static String getTimeShort() {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");<br />
    Date currentTime = new Date();<br />
    String dateString = formatter.format(currentTime);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 将长时间格式字符串转换为时间 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd HH:mm:ss</font><br />
    * <br />
    * @param strDate<br />
    * @return<br />
    */<br /></font>public static Date strToDateLong(String strDate) {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    ParsePosition pos = new ParsePosition(0);<br />
    Date strtodate = formatter.parse(strDate, pos);<br />
    return strtodate;<br />
}</p><p><font color="#ff0000">/**<br />
    * 将长时间格式时间转换为字符串 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd HH:mm:ss<br /></font>    * <br />
    * @param dateDate<br />
    * @return<br />
    */</font><br />
public static String dateToStrLong(java.util.Date dateDate) {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String dateString = formatter.format(dateDate);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 将短时间格式时间转换为字符串 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd</font><br />
    * <br />
    * @param dateDate<br />
    * @param k<br />
    * @return<br />
    */<br /></font>public static String dateToStr(java.util.Date dateDate) {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    String dateString = formatter.format(dateDate);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 将短时间格式字符串转换为时间 <font style="background-color: rgb(255, 255, 0);">yyyy-MM-dd</font><br />
    * <br />
    * @param strDate<br />
    * @return<br />
    */</font><br />
public static Date strToDate(String strDate) {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    ParsePosition pos = new ParsePosition(0);<br />
    Date strtodate = formatter.parse(strDate, pos);<br />
    return strtodate;<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到现在时间<br />
    * <br />
    * @return<br />
    */</font><br />
public static Date getNow() {<br />
    Date currentTime = new Date();<br />
    return currentTime;<br />
}</p><p><font color="#ff0000">/**<br />
    * 提取一个月中的最后一天<br />
    * <br />
    * @param day<br />
    * @return<br />
    */</font><br />
public static Date getLastDate(long day) {<br />
    Date date = new Date();<br />
    long date_3_hm = date.getTime() - 3600000 * 34 * day;<br />
    Date date_3_hm_date = new Date(date_3_hm);<br />
    return date_3_hm_date;<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到现在时间<br />
    * <br />
    * @return 字符串 yyyyMMdd HHmmss<br />
    */</font><br />
public static String getStringToday() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");<br />
    String dateString = formatter.format(currentTime);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到现在小时<br />
    */</font><br />
public static String getHour() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String dateString = formatter.format(currentTime);<br />
    String hour;<br />
    hour = dateString.substring(11, 13);<br />
    return hour;<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到现在分钟<br />
    * <br />
    * @return<br />
    */</font><br />
public static String getTime() {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String dateString = formatter.format(currentTime);<br />
    String min;<br />
    min = dateString.substring(14, 16);<br />
    return min;<br />
}</p><p><font color="#ff0000">/**<br />
    * 根据用户传入的时间表示格式，返回当前时间的格式 如果是yyyyMMdd，注意字母y不能大写。<br />
    * <br />
    * @param sformat<br />
    *              <font color="#ffff00">y</font><font style="background-color: rgb(255, 255, 0);" color="#ff0000">yyyMMddhhmmss<br /></font>    * @return<br />
    */<br /></font>public static String getUserDate(String sformat) {<br />
    Date currentTime = new Date();<br />
    SimpleDateFormat formatter = new SimpleDateFormat(sformat);<br />
    String dateString = formatter.format(currentTime);<br />
    return dateString;<br />
}</p><p><font color="#ff0000">/**<br />
    * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式，返回字符型的分钟<br />
    */</font><br />
public static String getTwoHour(String st1, String st2) {<br />
    String[] kk = null;<br />
    String[] jj = null;<br />
    kk = st1.split(":");<br />
    jj = st2.split(":");<br />
    if (Integer.parseInt(kk[0]) &lt; Integer.parseInt(jj[0]))<br />
     return "0";<br />
    else {<br />
     double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;<br />
     double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;<br />
     if ((y - u) &gt; 0)<br />
      return y - u + "";<br />
     else<br />
      return "0";<br />
    }<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到二个日期间的间隔天数<br />
    */</font><br />
public static String getTwoDay(String sj1, String sj2) {<br />
    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    long day = 0;<br />
    try {<br />
     java.util.Date date = myFormatter.parse(sj1);<br />
     java.util.Date mydate = myFormatter.parse(sj2);<br />
     day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);<br />
    } catch (Exception e) {<br />
     return "";<br />
    }<br />
    return day + "";<br />
}</p><p><font color="#ff0000">/**<br />
    * 时间前推或后推分钟,其中JJ表示分钟.<br />
    */</font><br />
public static String getPreTime(String sj1, String jj) {<br />
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
    String mydate1 = "";<br />
    try {<br />
     Date date1 = format.parse(sj1);<br />
     long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;<br />
     date1.setTime(Time * 1000);<br />
     mydate1 = format.format(date1);<br />
    } catch (Exception e) {<br />
    }<br />
    return mydate1;<br />
}</p><p><font color="#ff0000">/**<br />
    * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数<br />
    */</font><br />
public static String getNextDay(String nowdate, String delay) {<br />
    try{<br />
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");<br />
    String mdate = "";<br />
    Date d = strToDate(nowdate);<br />
    long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;<br />
    d.setTime(myTime * 1000);<br />
    mdate = format.format(d);<br />
    return mdate;<br />
    }catch(Exception e){<br />
     return "";<br />
    }<br />
}</p><p><font color="#ff0000">/**<br />
    * 判断是否润年<br />
    * <br />
    * @param ddate<br />
    * @return<br />
    */</font><br />
public static boolean isLeapYear(String ddate) {</p><p><font color="#ff0000">    /**<br />
     * 详细设计： 1.被400整除是闰年，否则： 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年<br />
     * 3.能被4整除同时能被100整除则不是闰年<br />
     */</font><br />
    Date d = strToDate(ddate);<br />
    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();<br />
    gc.setTime(d);<br />
    int year = gc.get(Calendar.YEAR);<br />
    if ((year % 400) == 0)<br />
     return true;<br />
    else if ((year % 4) == 0) {<br />
     if ((year % 100) == 0)<br />
      return false;<br />
     else<br />
      return true;<br />
    } else<br />
     return false;<br />
}</p><p><font color="#ff0000">/**<br />
    * 返回美国时间格式 26 Apr 2006<br />
    * <br />
    * @param str<br />
    * @return<br />
    */</font><br />
public static String getEDate(String str) {<br />
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    ParsePosition pos = new ParsePosition(0);<br />
    Date strtodate = formatter.parse(str, pos);<br />
    String j = strtodate.toString();<br />
    String[] k = j.split(" ");<br />
    return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);<br />
}</p><p><font color="#ff0000">/**<br />
    * 获取一个月的最后一天<br />
    * <br />
    * @param dat<br />
    * @return<br />
    */<br /></font>public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd<br />
    String str = dat.substring(0, 8);<br />
    String month = dat.substring(5, 7);<br />
    int mon = Integer.parseInt(month);<br />
    if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {<br />
     str += "31";<br />
    } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {<br />
     str += "30";<br />
    } else {<br />
     if (isLeapYear(dat)) {<br />
      str += "29";<br />
     } else {<br />
      str += "28";<br />
     }<br />
    }<br />
    return str;<br />
}</p><p><font color="#ff0000">/**<br />
    * 判断二个时间是否在同一个周<br />
    * <br />
    * @param date1<br />
    * @param date2<br />
    * @return<br />
    */</font><br />
public static boolean isSameWeekDates(Date date1, Date date2) {<br />
    Calendar cal1 = Calendar.getInstance();<br />
    Calendar cal2 = Calendar.getInstance();<br />
    cal1.setTime(date1);<br />
    cal2.setTime(date2);<br />
    int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);<br />
    if (0 == subYear) {<br />
     if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))<br />
      return true;<br />
    } else if (1 == subYear &amp;&amp; 11 == cal2.get(Calendar.MONTH)) {<br />
     // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周<br />
     if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))<br />
      return true;<br />
    } else if (-1 == subYear &amp;&amp; 11 == cal1.get(Calendar.MONTH)) {<br />
     if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))<br />
      return true;<br />
    }<br />
    return false;<br />
}</p><p><font color="#ff0000">/**<br />
    * 产生周序列,即得到当前时间所在的年度是第几周<br />
    * <br />
    * @return<br />
    */</font><br />
public static String getSeqWeek() {<br />
    Calendar c = Calendar.getInstance(Locale.CHINA);<br />
    String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));<br />
    if (week.length() == 1)<br />
     week = "0" + week;<br />
    String year = Integer.toString(c.get(Calendar.YEAR));<br />
    return year + week;<br />
}</p><p><font color="#ff0000">/**<br />
    * 获得一个日期所在的周的星期几的日期，如要找出2002年2月3日所在周的星期一是几号<br />
    * <br />
    * @param sdate<br />
    * @param num<br />
    * @return<br />
    */<br /></font>public static String getWeek(String sdate, String num) {<br />
    // 再转换为时间<br />
    Date dd = VeDate.strToDate(sdate);<br />
    Calendar c = Calendar.getInstance();<br />
    c.setTime(dd);<br />
    if (num.equals("1")) // 返回星期一所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);<br />
    else if (num.equals("2")) // 返回星期二所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);<br />
    else if (num.equals("3")) // 返回星期三所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);<br />
    else if (num.equals("4")) // 返回星期四所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);<br />
    else if (num.equals("5")) // 返回星期五所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);<br />
    else if (num.equals("6")) // 返回星期六所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);<br />
    else if (num.equals("0")) // 返回星期日所在的日期<br />
     c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);<br />
    return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());<br />
}</p><p><font color="#ff0000">/**<br />
    * 根据一个日期，返回是星期几的字符串<br />
    * <br />
    * @param sdate<br />
    * @return<br />
    */</font><br />
public static String getWeek(String sdate) {<br />
    // 再转换为时间<br />
    Date date = VeDate.strToDate(sdate);<br />
    Calendar c = Calendar.getInstance();<br />
    c.setTime(date);<br />
    // int hour=c.get(Calendar.DAY_OF_WEEK);<br />
    // hour中存的就是星期几了，其范围 1~7<br />
    // 1=星期日 7=星期六，其他类推<br />
    return new SimpleDateFormat("EEEE").format(c.getTime());<br />
}<br />
public static String getWeekStr(String sdate){<br />
    String str = "";<br />
    str = VeDate.getWeek(sdate);<br />
    if("1".equals(str)){<br />
     str = "星期日";<br />
    }else if("2".equals(str)){<br />
     str = "星期一";<br />
    }else if("3".equals(str)){<br />
     str = "星期二";<br />
    }else if("4".equals(str)){<br />
     str = "星期三";<br />
    }else if("5".equals(str)){<br />
     str = "星期四";<br />
    }else if("6".equals(str)){<br />
     str = "星期五";<br />
    }else if("7".equals(str)){<br />
     str = "星期六";<br />
    }<br />
    return str;<br />
}</p><p><font color="#ff0000">/**<br />
    * 两个时间之间的天数<br />
    * <br />
    * @param date1<br />
    * @param date2<br />
    * @return<br />
    */</font><br />
public static long getDays(String date1, String date2) {<br />
    if (date1 == null || date1.equals(""))<br />
     return 0;<br />
    if (date2 == null || date2.equals(""))<br />
     return 0;<br />
    // 转换为标准时间<br />
    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");<br />
    java.util.Date date = null;<br />
    java.util.Date mydate = null;<br />
    try {<br />
     date = myFormatter.parse(date1);<br />
     mydate = myFormatter.parse(date2);<br />
    } catch (Exception e) {<br />
    }<br />
    long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);<br />
    return day;<br />
}</p><p><font color="#ff0000">/**<br />
    * 形成如下的日历 ， 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间<br />
    * 此函数返回该日历第一行星期日所在的日期<br />
    * <br />
    * @param sdate<br />
    * @return<br />
    */<br /></font>public static String getNowMonth(String sdate) {<br />
    // 取该时间所在月的一号<br />
    sdate = sdate.substring(0, 8) + "01";</p><p>    // 得到这个月的1号是星期几<br />
    Date date = VeDate.strToDate(sdate);<br />
    Calendar c = Calendar.getInstance();<br />
    c.setTime(date);<br />
    int u = c.get(Calendar.DAY_OF_WEEK);<br />
    String newday = VeDate.getNextDay(sdate, (1 - u) + "");<br />
    return newday;<br />
}</p><p><font color="#ff0000">/**<br />
    * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数<br />
    * <br />
    * @param k<br />
    *              表示是取几位随机数，可以自己定<br />
    */</font></p><p>public static String getNo(int k) {</p><p>    return getUserDate("yyyyMMddhhmmss") + getRandom(k);<br />
}</p><p><font color="#ff0000">/**<br />
    * 返回一个随机数<br />
    * <br />
    * @param i<br />
    * @return<br />
    */</font><br />
public static String getRandom(int i) {<br />
    Random jjj = new Random();<br />
    // int suiJiShu = jjj.nextInt(9);<br />
    if (i == 0)<br />
     return "";<br />
    String jj = "";<br />
    for (int k = 0; k &lt; i; k++) {<br />
     jj = jj + jjj.nextInt(9);<br />
    }<br />
    return jj;<br />
}</p><p><br /></p><br /><br /><img src ="http://www.blogjava.net/Collus/aggbug/318152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Collus/" target="_blank">良帅</a> 2010-04-13 13:22 <a href="http://www.blogjava.net/Collus/articles/318152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>