天天看點

18、java.util.Date-SimpleDateFormat-Calendar-Math-Random

一、Date類

  1. 類 Date 表示特定的瞬間,精确到毫秒。 
  2. 在 JDK 1.1 之前,類 Date 有兩個其他的函數。
  3. 它允許把日期解釋為年、月、日、小時、分鐘和秒值。它也允許格式化和解析日期字元串。
  4. 不過,這些函數的 API 不易于實作國際化。
  5. 從 JDK 1.1 開始,應該使用 Calendar 類實作日期和時間字段之間轉換,
  6. 使用 DateFormat 類來格式化和解析日期字元串。
  7. Date 中的相應方法已廢棄。 
public class Date implements Serializable, Cloneable, Comparable<Date>
{
	//配置設定 Date 對象并初始化此對象,以表示配置設定它的時間(精确到毫秒)。
	//自 1970 年 1 月 1 日 00:00:00 GMT 以來的毫秒數
	public Date(){}
}
           

二、java.text.SimpleDateFormat類

  1. 軟體包 java.text 
  2. 提供以與自然語言無關的方式來處理文本、日期、數字和消息的類和接口。
  3. SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類。
  4. 它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規範化。 
  5. SimpleDateFormat 使得可以選擇任何使用者定義的日期-時間格式的模式。
  6. 日期和時間格式由日期和時間模式 字元串指定。
  7. 在日期和時間模式字元串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解釋為模式字母,用來表示日期或時間字元串元素
  8. 定義了以下模式字母(所有其他字元 'A' 到 'Z' 和 'a' 到 'z' 都被保留): 
  9. 模式字母通常是重複的,其數量确定其精确表示
字母 日期或時間元素 表示 示例

G

Era 标志符 Text

AD

y

Year

1996

;

96

M

年中的月份 Month

July

;

Jul

;

07

w

年中的周數 Number

27

W

月份中的周數 Number

2

D

年中的天數 Number

189

d

月份中的天數 Number

10

F

月份中的星期 Number

2

E

星期中的天數 Text

Tuesday

;

Tue

a

Am/pm 标記 Text

PM

H

一天中的小時數(0-23) Number

k

一天中的小時數(1-24) Number

24

K

am/pm 中的小時數(0-11) Number

h

am/pm 中的小時數(1-12) Number

12

m

小時中的分鐘數 Number

30

s

分鐘中的秒數 Number

55

S

毫秒數 Number

978

z

時區 General time zone

Pacific Standard Time

;

PST

;

GMT-08:00

Z

時區 RFC 822 time zone

-0800

/**
 *DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化并解析日期或時間。
 *日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标準化。
 */
public abstract class DateFormat extends Format
{
	//将一個 Date 格式化為日期/時間字元串
	public final String format(Date date){}

	//從給定字元串的開始解析文本,以生成一個日期。該方法不使用給定字元串的整個文本。
	//例如,時間文本 "07/10/96 4:5 PM, PDT" 會解析成等同于 Date(837039928046) 的 Date。 
	public Date parse(String source)
           throws ParseException{}
}
           
public class SimpleDateFormatextends DateFormat
{
	//用預設的模式和預設語言環境的日期格式符号構造 SimpleDateFormat
	public SimpleDateFormat(){}

	//用給定的模式和預設語言環境的日期格式符号構造 SimpleDateFormat
	public SimpleDateFormat(String pattern){}

	//将給定的 Date 格式化為日期/時間字元串,并将結果添加到給定的 StringBuffer
	public StringBuffer format(Date date,
                           StringBuffer toAppendTo,
                           FieldPosition pos){}
}
           

 示例:

import java.text.SimpleDateFormat;
import java.util.Date;

public class OtherClassTest {
	public static void main(String[] args) {
		
		Date d = new Date();
		System.out.println(d);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
		String time = sdf.format(d);
		System.out.println(time);
	}
}
           

三、Calendar 類

  1. Calendar 類是一個抽象類,不能執行個體化,可以建立它的子類對象new GregorianCalendar(),也可以通過getInstance擷取對象
  2. 它為特定瞬間 與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 月曆字段之間的轉換提供了一些方法,
  3. 并為操作月曆字段(例如獲得下星期的日期)提供了一些方法。
  4. 瞬間可用毫秒值來表示,它是距曆元(即格林威治标準時間 1970 年 1 月 1 日的 00:00:00.000,格裡高利曆)的偏移量。
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
{
	//常用字段
	public static final int DAY_OF_MONTH;
	public static final int DAY_OF_YEAR;
	public static final int DAY_OF_WEEK;
	public static final int DAY_OF_WEEK_IN_MONTH;//目前月中的第幾個星期
	public static final int HOUR;//HOUR 用于 12 小時制時鐘 (0 - 11)
	public static final int HOUR_OF_DAY;//HOUR_OF_DAY 用于 24 小時制時鐘
	public static final int MILLISECOND;//訓示一秒中的毫秒
	public static final int MINUTE;//訓示一小時中的分鐘
	public static final int SECOND;//訓示一分鐘中的秒
	public static final int MONTH;
	public static final int WEEK_OF_MONTH;
	public static final int WEEK_OF_YEAR;
	public static final int YEAR;

	//常用方法

	//根據月曆的規則,為給定的月曆字段添加或減去指定的時間量
	public abstract void add(int field,
                         int amount);

	//傳回給定月曆字段的值
	public int get(int field){}

	//使用預設時區和語言環境獲得一個月曆。傳回的 Calendar 基于目前時間,使用了預設時區和預設語言環境。
	public static Calendar getInstance(){}

	//傳回一個表示此 Calendar 時間值(從曆元至現在的毫秒偏移量)的 Date 對象
	public final Date getTime(){}

	//将給定的月曆字段設定為給定值。
	public void set(int field,
                int value){}

	//設定月曆字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
	public final void set(int year,
                      int month,
                      int date){}

	//設定月曆字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值
	public final void set(int year,
                      int month,
                      int date,
                      int hourOfDay,
                      int minute){}

	//設定字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值
	public final void set(int year,
                      int month,
                      int date,
                      int hourOfDay,
                      int minute,
                      int second){}

	//使用給定的 Date 設定此 Calendar 的時間。
	public final void setTime(Date date){}
} 
           

 示例:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 需求:擷取任意年的二月份天數
 */
public class CalendarTest {

	public static void main(String[] args) {
		
		Calendar c = Calendar.getInstance();
		c.set(2004,2,1);
		c.add(Calendar.DAY_OF_MONTH, -1);
		int num = c.get(Calendar.DAY_OF_MONTH);
		System.out.println(num);
		
		Date d = c.getTime();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String time = sdf.format(d);
		System.out.println(time);
	}

}
           

四、java.lang.Math類

/**
 *Math 類包含用于執行基本數學運算的方法,如初等指數、對數、平方根和三角函數
 */
public final class Math
{
	//字段********************************************

	//比任何其他值都更接近 e(即自然對數的底數)的 double 值
	public static final double E;

	//比任何其他值都更接近 pi(即圓的周長與直徑之比)的 double 值
	public static final double PI;

	//常用方法********************************************

	//傳回 double,float,int,long 值的絕對值
	public static double abs(double a){}

	//傳回 double 值的立方根
	public static double cbrt(double a){}

	//傳回最小的(最接近負無窮大)double 值,該值大于等于參數,并等于某個整數
	//ceil(5.4) = 6.0
	public static double ceil(double a){}

	//傳回角的三角餘弦。
	public static double cos(double a){}

	//傳回最大的(最接近正無窮大)double 值,該值小于等于參數,并等于某個整數
	//floor(2.3) = 2.0
	public static double floor(double a){}

	//傳回兩個 double,float,int,long 值中較大的一個
	public static double max(double a,
                         double b){}

	//傳回兩個 double,float,int,long 值中較小的一個
	public static float min(float a,
                        float b){}

	//傳回第一個參數的第二個參數次幂的值。
	public static double pow(double a,
                         double b){}

	//傳回帶正号的 double 值,該值大于等于 0.0 且小于 1.0。傳回值是一個僞随機選擇的數
	public static double random(){}

	//傳回最接近參數并等于某一整數的 double 值
	//rint(5.4)=5.0 rint(5.5)=6.0
	public static double rint(double a){}

	//..........
}
           

五、java.util.Random類

/**
 *此類的執行個體用于生成僞随機數流。
 */
public class Random implements Serializable
{
	//建立一個新的随機數生成器。
	public Random(){}

	//生成下一個僞随機數
	protected int next(int bits){}

	//傳回下一個僞随機數,它是取自此随機數生成器序列的、在 0.0 和 1.0 之間均勻分布的 float 值
	public float nextFloat(){}
	public double nextDouble(){}
	public double nextBoolean(){}
	public double nextLong(){}

	//生成随機位元組并将其置于使用者提供的 byte 數組中。所生成的随機位元組數等于該 byte 數組的長度
	public void nextBytes(byte[] bytes){}

	//傳回下一個僞随機數,它是此随機數生成器的序列中均勻分布的 int 值
	public int nextInt(){}

	//傳回一個僞随機數,它是取自此随機數生成器序列的、在 0(包括)和指定值(不包括)之間均勻分布的 int 值
	public int nextInt(int n){}

	//傳回下一個僞随機數,它是取自此随機數生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标準差是 1.0。
	public double nextGaussian(){}
}
           

六、示例

import java.util.Random;

public class MathTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		method2();
		method1();
	}
	public static void method1()
	{
		Random ran = new Random();
		for(int y=0;y<10;y++)
		{
			int x = ran.nextInt(10);
			System.out.println(x+1);
		}
	}
	public static void method2()
	{
		for(int y=0;y<10;y++)
		{
			int x = (int) (Math.random()*10%10+1);
			System.out.println(x);
		}
	}

}