﻿<?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-&lt;b&gt;&lt;font size='4'&gt;萧秋水的博客&lt;/font&gt;&lt;/b&gt;-随笔分类-J2SE</title><link>http://www.blogjava.net/Benjamin/category/14124.html</link><description>&lt;br&gt;&lt;font size='2.5'&gt;带着淡淡的倦意，轻轻的忧惺，宛若远山含笑迷蒙，但又如闪电惊雷般震人心魄……&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:55:27 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:55:27 GMT</pubDate><ttl>60</ttl><item><title>Java中一些关于日期、日期格式、日期的解析和日期的计算--转载</title><link>http://www.blogjava.net/Benjamin/archive/2006/08/15/63699.html</link><dc:creator>萧秋水</dc:creator><author>萧秋水</author><pubDate>Tue, 15 Aug 2006 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/Benjamin/archive/2006/08/15/63699.html</guid><wfw:comment>http://www.blogjava.net/Benjamin/comments/63699.html</wfw:comment><comments>http://www.blogjava.net/Benjamin/archive/2006/08/15/63699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Benjamin/comments/commentRss/63699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Benjamin/services/trackbacks/63699.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p>
						<font face="Verdana" color="#000000" size="2">     Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象. </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">    Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数. </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">一、创建一个日期对象<br /></font>
						<font face="Verdana" color="#000000" size="2">    使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间. <br /><br /></font>
						<font face="Verdana" color="#ff0000" size="2">Date date = new Date(); <br /></font>
						<font face="Verdana" color="#000000" size="2">
								<font color="#ff0000">System.out.println(date.getTime());</font>
								<br />
								<br />
						</font>
						<font face="Verdana" color="#000000" size="2">    上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期. <br /></font>
						<font face="Verdana" color="#000000" size="2">二、日期数据的定制格式 <br /></font>
						<font face="Verdana" color="#000000" size="2">    定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作: <br /></font>
						<font face="Verdana" color="#ff0000" size="2">
								<br />SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); <br /></font>
						<font face="Verdana" color="#ff0000" size="2">Date date = new Date(); <br /></font>
						<font face="Verdana" color="#000000" size="2">
								<font color="#ff0000">System.out.println(bartDateFormat.format(date));</font>
						</font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">    只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. <br />    下面是一些格式：<br /><table cellspacing="3" cellpadding="0" summary="Examples of date and time patterns interpreted in the U.S. locale" border="0"><tbody><tr bgcolor="#ccccff"><th align="left">Date and Time Pattern </th><th align="left">Result </th></tr><tr><td><code>"yyyy.MM.dd G 'at' HH:mm:ss z"</code></td><td><code>2001.07.04 AD at 12:08:56 PDT</code></td></tr><tr bgcolor="#eeeeff"><td><code>"EEE, MMM d, ''yy"</code></td><td><code>Wed, Jul 4, '01</code></td></tr><tr><td><code>"h:mm a"</code></td><td><code>12:08 PM</code></td></tr><tr bgcolor="#eeeeff"><td><code>"hh 'o''clock' a, zzzz"</code></td><td><code>12 o'clock PM, Pacific Daylight Time</code></td></tr><tr><td><code>"K:mm a, z"</code></td><td><code>0:08 PM, PDT</code></td></tr><tr bgcolor="#eeeeff"><td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code></td><td><code>02001.July.04 AD 12:08 PM</code></td></tr><tr><td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code></td><td><code>Wed, 4 Jul 2001 12:08:56 -0700</code></td></tr><tr bgcolor="#eeeeff"><td><code>"yyMMddHHmmssZ"</code></td><td><code>010704120856-0700</code></td></tr></tbody></table><br /><br /></font>
						<font face="Verdana" color="#000000" size="2">三、将文本数据解析成日期对象<br /></font>
						<font face="Verdana" color="#000000" size="2">    假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象. </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy"); <br /></font>
						<font face="Verdana" color="#ff0000" size="2">String dateStringToParse = "9-29-2001"; <br /></font>
						<font face="Verdana" color="#ff0000" size="2">try { <br />Date date = bartDateFormat.parse(dateStringToParse); <br /></font>
						<font face="Verdana" color="#ff0000" size="2">System.out.println(date.getTime()); <br />} catch (Exception ex) { <br />System.out.println(ex.getMessage()); <br />} <br /><br /></font>
						<font face="Verdana" color="#000000" size="2">四、使用标准的日期格式化过程 </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式. </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">Date date = new Date(); </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);<br /></font>
						<font color="#ff0000">
								<font face="Verdana" size="2">DateFormat mediumDateFormat =DateFormat.getDateTimeInstance( DateFormat.MEDIUM, teFormat.MEDIUM);<br /></font>
								<font face="Verdana" size="2">DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); </font>
								<font face="Verdana" size="2">DateFormat fullDateFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); </font>
						</font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">
								<font color="#ff0000">System.out.println(shortDateFormat.format(date)); <br />System.out.println(mediumDateFormat.format(date)); <br />System.out.println(longDateFormat.format(date)); <br />System.out.println(fullDateFormat.format(date)); <br /></font>
						</font>
						<font face="Verdana" color="#000000" size="2">
								<br />注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. <br /></font>
						<font face="Verdana" color="#000000" size="2">运行例子程序的时候, 它将向标准输出设备输出下面的内容: <br />9/29/01 8:44 PM <br />Sep 29, 2001 8:44:45 PM <br />September 29, 2001 8:44:45 PM EDT <br />Saturday, September 29, 2001 8:44:45 PM EDT</font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">五、Calendar 类 </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号. </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">
								<br />
								<font color="#ff0000">DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL); <br /><br /></font>
						</font>
						<font face="Verdana" color="#ff0000" size="2">GregorianCalendar cal = new GregorianCalendar(); <br /></font>
						<font face="Verdana" size="2">
								<br />
								<font color="#ff0000">cal.setTime(new Date()); <br /></font>
						</font>
						<font face="Verdana" color="#ff0000" size="2">System.out.println("System Date: " + dateFormat.format(cal.getTime())); </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">// Set the day of week to FRIDAY <br />cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); <br />System.out.println("After Setting Day of Week to Friday: " + <br />dateFormat.format(cal.getTime())); </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">int friday13Counter = 0; </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">while (friday13Counter &lt;= 10) <br />{ </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">// Go to the next Friday by adding 7 days. <br />cal.add(GregorianCalendar.DAY_OF_MONTH, 7); </font>
				</p>
				<p>
						<font face="Verdana" color="#ff0000" size="2">// If the day of month is 13 we have <br />// another Friday the 13th. <br />if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) <br />{ <br />friday13Counter++; <br />System.out.println(dateFormat.format(cal.getTime())); <br />} <br />} </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">在这个例子中作了有趣的函数调用: <br />cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); <br /></font>
						<font face="Verdana" color="#000000" size="2">和 <br />cal.add(GregorianCalendar.DAY_OF_MONTH, 7); </font>
				</p>
				<p>
						<font face="Verdana" color="#000000" size="2">set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五. 注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. add 方法让我们能够在日期上加上数值. 润年的所有复杂的计算都由这个方法自动处理. </font>
				</p>
				<p>
						<font color="#000000">
								<font face="Verdana" size="2">我们这个例子的输出结果是: <br />System Date: Saturday, September 29, 2001 <br />当我们将它设置成星期五以后就成了: Friday, September 28, 2001 <br />Friday, September 13, 2002 <br />Friday, December 13, 2002 <br />Friday, June 13, 2003 <br />Friday, February 13, 2004 <br />Friday, August 13, 2004 <br />Friday, May 13, 2005 <br />Friday, January 13, 2006 <br />Friday, October 13, 2006 <br />Friday, April 13, 2007 <br />Friday, July 13, 2007 <br />Friday, June 13, 2008 <br /><br />GregorianCalendar类提供处理日期的方法。一个有用的方法是<font color="#ff0000">add().</font>使用add()方法，你能够增加象年，月数，天数到日期对象中。要使用add()方法，你必须提供要增加的字段，要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法计算未来80天的一个日期。在Jules的&lt;环球80天&gt;是一个重要的数字，使用这个程序可以计算Phileas Fogg从出发的那一天1872年10月2日后80天的日期：<br /><br /></font>
								<font face="Verdana" color="#ff0000" size="2">GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);<br />worldTour.add(GregorianCalendar.DATE, 80);<br />Date d = worldTour.getTime();<br />DateFormat df = DateFormat.getDateInstance();<br />String s = df.format(d);<br />System.out.println("80 day trip will end " + s);<br /><br /></font>
						</font>
				</p>
				<p align="justify">
						<font color="#000000">
								<font face="Verdana" color="#ff0000" size="2">
										<font color="#000000">五、实现日期以天数的加减：<br />/* 将当前日期加减n天数。 <br />* 如传入字符型"-5" 意为将当前日期减去5天的日期<br />* 如传入字符型"5" 意为将当前日期加上5天后的日期<br />* 返回字串 例(1999-02-03)<br />*/</font>
										<br />public String dateAdd(String to)<br />{<br />//日期处理模块 (将日期加上某些天或减去天数)返回字符串<br />int strTo;<br />try {<br />   strTo = Integer.parseInt(to);}<br />catch (Exception e) {<br />   System.out.println("日期标识转换出错! : \n:::" + to + "不能转为数字型");<br />   e.printStackTrace();<br />   strTo = 0;<br />}<br />Calendar strDate = Calendar.getInstance(); //java.util包,设置当前时间<br />strDate.add(strDate.DATE, strTo); //日期减 如果不够减会将月变动 //生成 (年-月-日)<br />String meStrDate = strDate.get(strDate.YEAR) + "-" +String.valueOf(strDate.get(strDate.MONTH)+1) + "-" + strDate.get(strDate.DATE);<br />return meStrDate;<br />}</font>
						</font>
				</p>
		</div>
<img src ="http://www.blogjava.net/Benjamin/aggbug/63699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Benjamin/" target="_blank">萧秋水</a> 2006-08-15 16:01 <a href="http://www.blogjava.net/Benjamin/archive/2006/08/15/63699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>