1.3 日历类Calendar
在早期的JDK版本中,日期(Date)类附有两大功能:(1)允许用年、月、日、时、分、秒来解释日期:(2)允许对表示日期的字符串进行格式化和句法分析。在JDK1.1中提供了类Calendar来完成第一种功能,类DateFormat来完成第二项功能。
dateFormat是java.text包中的一个类。与Date类有所不同的是,DateFormat类接受用各种语言和不同习惯表示的日期字符串。本节将介绍java.util包中的类Calendar及其它新增加的相关的类。
类Calendar是一个抽象类,它完成日期(Date)类和普通日期表示法(即用一组整型域如YEAR,MONTH,DAY,HOUR表示日期)之间的转换。
由于所使用的规则不同,不同的日历系统对同一个日期的解释有所不同。在JDK1.1中提供了Calendar类一个子类GregorianCalendar??它实现了世界上普遍使用的公历系统。当然用户也可以通过继承Calendar类,并增加所需规则,以实现不同的日历系统。
第GregorianCalendar继承了Calendar类。本节将在介绍类GregorianCalendar的同时顺带介绍Calendar类中的相关方法。
类GregorianCalendar提供了七种构造函数:
(1)public GregorianCalendar()
创建的对象中的相关值被设置成指定时区,缺省地点的当前时间,即程序运行时所处的时区、地点的当前时间。
(2)public GregorianCalendar(TimeZone zone)
创建的对象中的相关值被设置成指定时区zone,缺省地点的当前时间。
(3)public GregorianCalendar(Locale aLocale)
创建的对象中的相关值被设置成缺省时区,指定地点aLocale的当前时间。
(4)public GregorianCalendar(TimeZone zone,Local aLocale)
创建的对象中的相关值被设置成指定时区,指定地点的当前时间。
上面使用到的类TimeZone的性质如下:
TimeZone是java.util包中的一个类,其中封装了有关时区的信息。每一个时区对应一组ID。类TimeZone提供了一些方法完成时区与对应ID两者之间的转换。
(Ⅰ)已知某个特定的ID,可以调用方法
public static synchronized TimeZone getTimeZone(String ID) 来获取对应的时区对象。
例
太平洋时区的ID为PST,用下面的方法可获取对应于太平洋时区的时区对象:
TimeZone tz=TimeZone.getTimeZone("PST");
调用方法getDefault()可以获取主机所处时区的对象。
TimeZone tz=TimeZone.getDefault();
(Ⅱ)调用以下方法可以获取时区的ID
public static synchronized String[]
getavailableIDs(int rawOffset)
根据给定时区偏移值获取ID数组。同一时区的不同地区的ID可能不同,这是由于不同地区对是否实施夏时制意见不统一而造成的。
例
String s[]=TimeZone.getAvailableIDs(-7*60*60*1000);
打印s,结果为s[0]=PNT,s[1]=MST
public static synchronized String[] getAvailableIDs()
获取提供的所有支持的ID。
public String getID()
获取特定时区对象的ID。
例:
TimeZone tz=TimeZone.getDefault();
String s=tz.getID();
打印s,结果为s=CTT。
上面使用类的对象代表了一个特定的地理、政治或文化区域。Locale只是一种机制,它用来标识一类对象,Local本身并不包含此类对象。要获取一个Locale的对象有两种方法:
(Ⅰ)调用Locale类的构造方法:
Locale(String language,String country)
Locale(String language,
String country,String variant)
(Ⅱ)调用Locale类中定义的常量
Local类提供了大量的常量供用户创建Locale对象。
例 Locale.CHINA
为中国创建一个Locale的对象。
类TimeZone和类Locale中的其它方法,读者可查阅API。
(5)public GregorianCalendar(int year,int month,int date)
(6)public GregorianCalendar(int year,int month,int date,int hour,int minute)
(7)public GregorianCalendar(int year,int month,int date,int hour,int minute,int second)
用给定的日期和时间创建一个GregorianCalendar的对象。
参数说明:
year-设定日历对象的变量YEAR;month-设定日历对象的变量MONTH;
date-设定日历对象的变量DATE;hour-设定日历对象的变量HOUR_OF_DAY;
minute-设定日历对象的变量MINUTE;second-设定日历对象的变量SECOND。
与Date类中不同的是year的值没有1900这个下限,而且year的值代表实际的年份。month的含义与Date类相同,0代表1月,11代表12月。
例 GregorianCalendar cal=new GregorianCalendar(1991,2,4)
cal的日期为1991年3月4号。
除了与Date中类似的方法外,Calendar类还提供了有关方法对日历进行滚动计算和数学计算。计算规则由给定的日历系统决定。进行日期计算时,有时会遇到信息不足或信息不实等特殊情况。Calendar采取了相应的方法解决这些问题。当信息不足时将采用缺省设置,在GregorianCalendar类中缺省设置一般为YEAR=1970,MONTH=JANUARY,DATE=1。
当信息不实时,Calendar将按下面的次序优先选择相应的Calendar的变量组合,并将其它有冲突的信息丢弃。
MONTH+DAY_OF_MONTH
MONTH+WEEK_OF_MONTH+DAY_OF_WEEK
MONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEK
DAY_OF+YEAR
DAY_OF_WEEK_WEEK_OF_YEAR
HOUR_OF_DAY
1.4 随机数类Random
Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。
类Random中的方法十分简单,它只有两个构造方法和六个普通方法。
构造方法:
(1)public Random()
(2)public Random(long seed)
Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。
普通方法:
(1)public synonronized void setSeed(long seed)
该方法是设定基值seed。
(2)public int nextInt()
该方法是产生一个整型随机数。
(3)public long nextLong()
该方法是产生一个long型随机数。
(4)public float nextFloat()
该方法是产生一个Float型随机数。
(5)public double nextDouble()
该方法是产生一个Double型随机数。
(6)public synchronized double nextGoussian()
该方法是产生一个double型的Goussian随机数。
例1.2 RandomApp.java。
//import java.lang.*;
import java.util.Random;
public class RandomApp
{
public static void main(String args[])
{
Random ran1=new Random();
Random ran2=new Random(12345);
//创建了两个类Random的对象。
System.out.println
("The 1st set of random numbers:");
System.out.println
("/t Integer:"+ran1.nextInt());
System.out.println
("/t Long:"+ran1.nextLong());
System.out.println
("/t Float:"+ran1.nextFloat());
System.out.println
("/t Double:"+ran1.nextDouble());
System.out.println
("/t Gaussian:"+ran1.nextGaussian());
//产生各种类型的随机数
System.out.print
("The 2nd set of random numbers:");
for(int i=0;i<5;i++)
{
System.out.println(ran2.nextInt()+" ");
if(i==2) System.out.println();
//产生同种类型的不同的随机数。
System.out.println();
//原文如此
}
}
}
运行结果:
E:/java01>java RandomApp
The 1st set of random numbers:
Integer:-173899656
Long:8056223819738127077
Float:0.6293638
Double:0.7888394520265607
Gaussian:0.5015701094568733
The 2nd set of random numbers:1553932502
-2090749135
-287790814
-355989640
-716867186
E:/java01>
在早期的JDK版本中,日期(Date)类附有两大功能:(1)允许用年、月、日、时、分、秒来解释日期:(2)允许对表示日期的字符串进行格式化和句法分析。在JDK1.1中提供了类Calendar来完成第一种功能,类DateFormat来完成第二项功能。
dateFormat是java.text包中的一个类。与Date类有所不同的是,DateFormat类接受用各种语言和不同习惯表示的日期字符串。本节将介绍java.util包中的类Calendar及其它新增加的相关的类。
类Calendar是一个抽象类,它完成日期(Date)类和普通日期表示法(即用一组整型域如YEAR,MONTH,DAY,HOUR表示日期)之间的转换。
由于所使用的规则不同,不同的日历系统对同一个日期的解释有所不同。在JDK1.1中提供了Calendar类一个子类GregorianCalendar??它实现了世界上普遍使用的公历系统。当然用户也可以通过继承Calendar类,并增加所需规则,以实现不同的日历系统。
第GregorianCalendar继承了Calendar类。本节将在介绍类GregorianCalendar的同时顺带介绍Calendar类中的相关方法。
类GregorianCalendar提供了七种构造函数:
(1)public GregorianCalendar()
创建的对象中的相关值被设置成指定时区,缺省地点的当前时间,即程序运行时所处的时区、地点的当前时间。
(2)public GregorianCalendar(TimeZone zone)
创建的对象中的相关值被设置成指定时区zone,缺省地点的当前时间。
(3)public GregorianCalendar(Locale aLocale)
创建的对象中的相关值被设置成缺省时区,指定地点aLocale的当前时间。
(4)public GregorianCalendar(TimeZone zone,Local aLocale)
创建的对象中的相关值被设置成指定时区,指定地点的当前时间。
上面使用到的类TimeZone的性质如下:
TimeZone是java.util包中的一个类,其中封装了有关时区的信息。每一个时区对应一组ID。类TimeZone提供了一些方法完成时区与对应ID两者之间的转换。
(Ⅰ)已知某个特定的ID,可以调用方法
public static synchronized TimeZone getTimeZone(String ID) 来获取对应的时区对象。
例
太平洋时区的ID为PST,用下面的方法可获取对应于太平洋时区的时区对象:
TimeZone tz=TimeZone.getTimeZone("PST");
调用方法getDefault()可以获取主机所处时区的对象。
TimeZone tz=TimeZone.getDefault();
(Ⅱ)调用以下方法可以获取时区的ID
public static synchronized String[]
getavailableIDs(int rawOffset)
根据给定时区偏移值获取ID数组。同一时区的不同地区的ID可能不同,这是由于不同地区对是否实施夏时制意见不统一而造成的。
例
String s[]=TimeZone.getAvailableIDs(-7*60*60*1000);
打印s,结果为s[0]=PNT,s[1]=MST
public static synchronized String[] getAvailableIDs()
获取提供的所有支持的ID。
public String getID()
获取特定时区对象的ID。
例:
TimeZone tz=TimeZone.getDefault();
String s=tz.getID();
打印s,结果为s=CTT。
上面使用类的对象代表了一个特定的地理、政治或文化区域。Locale只是一种机制,它用来标识一类对象,Local本身并不包含此类对象。要获取一个Locale的对象有两种方法:
(Ⅰ)调用Locale类的构造方法:
Locale(String language,String country)
Locale(String language,
String country,String variant)
(Ⅱ)调用Locale类中定义的常量
Local类提供了大量的常量供用户创建Locale对象。
例 Locale.CHINA
为中国创建一个Locale的对象。
类TimeZone和类Locale中的其它方法,读者可查阅API。
(5)public GregorianCalendar(int year,int month,int date)
(6)public GregorianCalendar(int year,int month,int date,int hour,int minute)
(7)public GregorianCalendar(int year,int month,int date,int hour,int minute,int second)
用给定的日期和时间创建一个GregorianCalendar的对象。
参数说明:
year-设定日历对象的变量YEAR;month-设定日历对象的变量MONTH;
date-设定日历对象的变量DATE;hour-设定日历对象的变量HOUR_OF_DAY;
minute-设定日历对象的变量MINUTE;second-设定日历对象的变量SECOND。
与Date类中不同的是year的值没有1900这个下限,而且year的值代表实际的年份。month的含义与Date类相同,0代表1月,11代表12月。
例 GregorianCalendar cal=new GregorianCalendar(1991,2,4)
cal的日期为1991年3月4号。
除了与Date中类似的方法外,Calendar类还提供了有关方法对日历进行滚动计算和数学计算。计算规则由给定的日历系统决定。进行日期计算时,有时会遇到信息不足或信息不实等特殊情况。Calendar采取了相应的方法解决这些问题。当信息不足时将采用缺省设置,在GregorianCalendar类中缺省设置一般为YEAR=1970,MONTH=JANUARY,DATE=1。
当信息不实时,Calendar将按下面的次序优先选择相应的Calendar的变量组合,并将其它有冲突的信息丢弃。
MONTH+DAY_OF_MONTH
MONTH+WEEK_OF_MONTH+DAY_OF_WEEK
MONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEK
DAY_OF+YEAR
DAY_OF_WEEK_WEEK_OF_YEAR
HOUR_OF_DAY
1.4 随机数类Random
Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。
类Random中的方法十分简单,它只有两个构造方法和六个普通方法。
构造方法:
(1)public Random()
(2)public Random(long seed)
Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。
普通方法:
(1)public synonronized void setSeed(long seed)
该方法是设定基值seed。
(2)public int nextInt()
该方法是产生一个整型随机数。
(3)public long nextLong()
该方法是产生一个long型随机数。
(4)public float nextFloat()
该方法是产生一个Float型随机数。
(5)public double nextDouble()
该方法是产生一个Double型随机数。
(6)public synchronized double nextGoussian()
该方法是产生一个double型的Goussian随机数。
例1.2 RandomApp.java。
//import java.lang.*;
import java.util.Random;
public class RandomApp
{
public static void main(String args[])
{
Random ran1=new Random();
Random ran2=new Random(12345);
//创建了两个类Random的对象。
System.out.println
("The 1st set of random numbers:");
System.out.println
("/t Integer:"+ran1.nextInt());
System.out.println
("/t Long:"+ran1.nextLong());
System.out.println
("/t Float:"+ran1.nextFloat());
System.out.println
("/t Double:"+ran1.nextDouble());
System.out.println
("/t Gaussian:"+ran1.nextGaussian());
//产生各种类型的随机数
System.out.print
("The 2nd set of random numbers:");
for(int i=0;i<5;i++)
{
System.out.println(ran2.nextInt()+" ");
if(i==2) System.out.println();
//产生同种类型的不同的随机数。
System.out.println();
//原文如此
}
}
}
运行结果:
E:/java01>java RandomApp
The 1st set of random numbers:
Integer:-173899656
Long:8056223819738127077
Float:0.6293638
Double:0.7888394520265607
Gaussian:0.5015701094568733
The 2nd set of random numbers:1553932502
-2090749135
-287790814
-355989640
-716867186
E:/java01>