javautil包学习笔记JavaUtil包使用详解本章介绍Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector)、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。图1.1给出了java.util包的基本层次结构图。下面我们将具体介绍其中几个重要的类。┌java.util.BitSet│java.util.Calendar│└java.util.GregorianCalendar│java.util.Date│java.util.Dictionary│└java.util.Hashtable│└java.util.Properties│java.util.EventObject│java.util.ResourceBundle┌普通类┤├java.util.ListResourceBundle││└java.util.PropertyResourceBundle││java.util.Local││java.util.Observable││java.util.Random││java.util.StringTokenizer││java.util.Vector││└java.util.StackJava.util┤└java.util.TimeZone│└java.util.SimpleTimeZone│┌java.util.Enumeration├接口┤java.util.EventListener│└java.util.Observer│┌java.util.EmptyStackException└异常类┤java.util.MissingResourceException│java.util.NoSuchElementException└java.util.TooManyListenersException图1.1java.util包的基本层次结构1.2日期类DateJava在日期类中封装了有关日期和时间的信息,用户可以通过调用相应的方法来获取系统时间或设置日期和时间。Date类中有很多方法在JDK1.0公布后已经过时了,在8.3中我们将介绍JDK1.0中新加的用于替代Date的功能的其它类。在日期类中共定义了六种构造函数。(1)publicDate()创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间。例Datetoday=newDate();//today被设置成创建时刻相对应的日期时间。(2)publicDate(longdate)long型的参数date可以通过调用Date类中的static方法parse(Strings)来获得。例longl=Date.parse(Mon6Jan199713:3:00);Dateday=newDate(l);//day中时间为1997年1月6号星期一,13:3:00。(3)publicDate(Strings)按字符串s产生一日期对象。s的格式与方法parse中字符串参数的模式相同。例Dateday=newDate(Mon6Jan199713:3:00);//day中时间为1997年1月6号星期一,13:3:00.(4)publicDate(intyear,intmonth,intdate)(5)publicDate(intyear,intmonth,intdate,inthrs,intmin)(6)publicDate(intyear,intmonth,intdate,inthrs,intmin,intsec)按给定的参数创建一日期对象。参数说明:year的值为:需设定的年份-1900。例如需设定的年份是1997则year的值应为97,即1997-1900的结果。所以Date中可设定的年份最小为1900;month的值域为0~11,0代表1月,11表代表12月;date的值域在1~31之间;hrs的值域在0~23之间。从午夜到次日凌晨1点间hrs=0,从中午到下午1点间hrs=12;min和sec的值域在0~59之间。例Dateday=newDate(11,3,4);//day中的时间为:04-Apr-1112:00:00AM另外,还可以给出不正确的参数。例设定时间为1910年2月30日,它将被解释成3月2日。Dateday=newDate(10,1,30,10,12,34);System.out.println(Day'sdateis:+day);//打印结果为:Day'sdateis:WebMar0210:13:34GMT+08:001910下面我们给出一些Date类中常用方法。(1)publicstaticlongUTC(intyear,intmonth,intdate,inthrs.intmin,intsec)该方法将利用给定参数计算UTC值。UTC是一种计时体制,与GMT(格林威治时间)的计时体系略有差别。UTC计时体系是基于原子时钟的,而GTMT计时体系是基于天文学观测的。计算中使用的一般为GMT计时体系。(2)publicstaticlongparse(Strings)该方法将字符串s转换成一个long型的日期。在介绍构造方法Date(longdate)时曾使用过这个方法。字符串s有一定的格式,一般为:(星期日年时间GMT+时区)若不注明时区,则为本地时区。(3)publicvoidsetMonth(intmonth)(4)publicintgetMonth()这两个方法分别为设定和获取月份值。获取的月份的值域为0~11,0代表1月,11代表12月。(5)publicStringtoString()(6)publicStringtoLocalString()(7)publicStringtoGMTString()将给定日期对象转换成不同格式的字符串。它们对应的具体的格式可参看例子8.1。(8)publicintgetTimezoneOffset()该方法用于获取日期对象的时区偏移量。例8.1中对上面介绍的Date类中的基本方法进行了具体的应用,并打印了相应的结果。由于使用了一些过时的方法,所以编译时会有警告信息。另外,由于本例中的时间表示与平台有关,不同的JDK版本对此处理不完全相同,因此不同版本的JDK执行本例的结果可能有细微差异。例1.1DateApp.javaimportjava.lang.System;Java代码importjava.util.Date;publicclassDateApp{publicstaticvoidmain(Stringargs[]){Datetoday=newDate();//today中的日期被设成创建时刻的日期和时间,假设创建时刻为1997年3月//23日17时51分54秒。System.out.println(Today'sdateis+today);//返回一般的时间表示法,本例中结果为//Today'sdateisFriMay2317:51:541997System.out.println(Today'sdate(InternetGMT)is:+today.toGMTString());//返回结果为GMT时间表示法,本例中结果为//Today'sdate(InternetGMT)is:23May199709:51:54:GMTSystem.out.println(Today'sdate(Locale)is:+today.toLocaleString());//返回结果为本地习惯的时间表示法,结果为//Today'sdate(Locale)is:05/23/9717:51:54System.out.println(Today'syearis:+today.getYear());System.out.println(Today'smonthis:+(today.getMonth()+1));System.out.println(Today'sdateis:+today.getDate());//调用Date类中方法,获取年月日的值。//下面调用了不同的构造方法来创建Date类的对象。Dateday1=newDate(100,1,23,10,12,34);System.out.println(Day1'sdateis:+day1);Dateday2=newDate(Sat12Aug199613:3:00);System.out.println(Day2'sdateis:+day2);longl=Date.parse(Sat5Aug199613:3:00GMT+0800);Dateday3=newDate(l);System.out.println(Day3'sdate(GMT)is:+day3.toGMTString());System.out.println(Day3'sdate(Locale)is:+day3.toLocaleString());System.out.println(Day3'stimezoneoffsetis:+day3.getTimezoneOffset());}}运行结果(JDK1.3版,与原文不同,原文是JDK1.0版):E:\java\tutorial\java01javaDateAppToday'sdateisThuDec2717:58:16CST2001Today'sdate(InternetGMT)is:27Dec200109:58:16GMTToday'sdate(Locale)is:2001-12-2717:58:16Today'syearis:101Today'smonthis:12Today'sdateis:27Day1'sdateis:WedFeb2310:12:34CST2000Day2'sdateis:FriAug1213:03:00CST1996Day3'sdate(GMT)is:5Aug199605:03:00GMTDay3'sdate(Locale)is:1996-8-513:03:00Day3'stimezoneoffsetis:-480E:\java\tutorial\java01importjava.util.Date;publicclassDateApp{publicstaticvoidmain(Stringargs[]){Datetoday=newDate();//today中的日期被设成创建时刻的日期和时间,假设创建时刻为1997年3月//23日17时51分54秒。System.out.println(Today'sdateis+today);//返回一般的时间表示法,本例中结果为//Today'sdateisFriMay2317:51:541997System.out.println(Today'sdate(InternetGMT)is:+today.toGMTString());//返回结果为GMT时间表示法,本例中结果为//Today'sdate(InternetGMT)is:23May199709:51:54:GMTSystem.out.println(Today'sdate(Locale)is:+today.toLocaleString());//返回结果为本地习惯的时间表示法,结果为//Today'sdate(Locale)is:05/23/9717:51:54System.out.println(Today'syearis:+today.getYear());System.out.println(Today'smonthis:+(today.getMonth()+1));System.out.println(Today'sdateis:+today.get