黑馬程序員 java基礎--其它對象Date、Calendar和Math-Random(2)

                                                                     -------android培訓java培訓java學習型技術博客、期待與您交流! ----------

、Date類

1、概述:

      表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之後經歷的毫秒數.

      java中默認的格式如:Sun Jan 18 10:17:58 CST 2013

      這樣的格式不容易看懂,而且不一定滿足每個人的需求,那麼就需要自定義格式,需要格式化日期模式。具體步驟:

1)創建Date對象
2)將模式封裝到SimpleDateFormat對象中
3)調用format方法讓模式格式化指定Date對象

下面給出完整的代碼和註釋:

import java.util.*;
import java.text.*;
class DateDemo
{
    public static void main(String[] args)
	{
	Date d=new Date();
	//打印的時間看不懂,希望有些格式
	System.out.println(d);
	
	//將模式封裝到SimpleDateFormat對象中
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
	
	//調用formate方法讓模式格式化指定的Date對象
	String time=sdf.format(d);
	
	System.out.println("time="+time);
	
	}
 }

四、Calendar類

1、概述:

1)Calendar是一個抽象類,它爲特定瞬間與一組諸如YEAR、MONTH、DAY_OF_MONTH等日曆字段之間的轉換提供了一些方法。

2)Calendar可以對年月日等時間進行獲取。並提供了相應的子段值。具體的例子可參閱API文檔。

2、方法:

2.1、基本獲取時間

1)獲取年份:Calendar.YEAR
2)獲取月份:Calendar.MONTH
3)獲取日期:Calendar.DAY_OF_MONTH
4)獲取星期:Calendar.DAY_OF_WEEK
5)獲取小時:Calendar.HOUR_OF_DAY
6)獲取分鐘:Calendar.MINUTE
7)獲取秒數:Calendar.SECOND

2.2、設置時間:

1)爲給定的日曆字段添加或減去指定的時間值:   --->   void add(int field,int amount);

2)獲取指定的日曆字段對應的時間值:                  --->   int get(int field);

3)將給定日曆字段對應的時間值設置爲給定值:  --->   void set(int field,int value);

      設置日曆字段 YEAR、MONTH和DAY_OF_MONTH的值: --->   void set(int year,int month,int date);

3.用查表法打印出現在的日期:

import java.util.*;
import java.text.*;
class CalendarDemo
{
    public static void main(String[] args)
	{
	Calendar c=Calendar.getInstance();
    
	//查表法
	String[] mons={"一月","二月","三月","四月",
	               "五月","六月","七月","八月",
				   "九月","十月","十一月","十二月"};
	
	String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",};
	int index=c.get(Calendar.MONTH);
	
	int index1=c.get(Calendar.DAY_OF_WEEK);
	
    sop(c.get(Calendar.YEAR)+"年");
	//sop((c.get(Calendar.MONTH)+1)+"月");
	sop(mons[index]);
	sop(c.get(Calendar.DAY_OF_MONTH)+"日");
	//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
	sop(weeks[index1]);
	/*
	Date d=new Date();
	
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy");
	
	String year=sdf.format(d);
	
	System.out.println(year);
	*/
	
	}
	
	public static void sop(Object obj)
	{
	 System.out.println(obj);
	}
 }
練習:

1、獲取任意年的二月有多少天:

2、獲取前一天的現在這個時刻
3、計算有效上課天數,每週六日不上課,計算任意年從九月到十月的有效上課天數

import java.util.*;

class CalendarTest 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		//測試1
		int n = getFEB(2012);
		sop("2012年2月的天數:" + n);
		//測試2
		String s = getTheTime();
		sop("昨天的現在這個時刻是:" + s);
		sop("-----------------");
		//測試3
		int m = getValDay(2013,1,3);
		sop("有效上課天數:" + m);

	}
	//測試1:創建獲取二月的方法
	public static int getFEB(int year)
	{
		Calendar c = Calendar.getInstance();
		//設置任意年的時間爲3月1號
		c.set(year,2,1);
		//獲取設置後的3月1日,並減去1天,即爲二月最後一天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//獲取最終設置的日期,即爲獲取到的二月的天數
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n;
	}

	//測試2:獲取前一天的現在這個時刻
	public static String getTheTime()
	{
		//獲取時間信息
		Calendar c = Calendar.getInstance();
		//將日期設置爲昨天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//獲取昨天的現在這個時刻
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
	}

	//測試3:計算有效上課天數
	public static int getValDay(int year,int startMON,int endMON)
	{
		//獲取時間信息
		Calendar c = Calendar.getInstance();
		//調用獲取天數函數
		int day = getDay(c,year,startMON,endMON);
		sop("總天數:" + day);//測試獲取的天數
		//初始化星期
		int week = 0;
		//定義計數器
		int count = 0;
		//遍歷每天一天,判斷是否爲週六日,f否的話計數器自增
		for(int i=0;i<day;i++)
		{
			//必須要先將天數加1再判斷,否則到week爲6的時候會一直continue,
			//而且此處也可以避免下面的week是以星期日爲第一天的問題
			c.add(Calendar.DAY_OF_MONTH,1);
			//獲取當前天數的星期
			week = c.get(Calendar.DAY_OF_WEEK);
			sop("星期:" + week);
			if (week==6 || week==7)
				continue;
			count++;
			sop("有效天數:" + count);
		}
		return count;
	}
	//獲取給定月份的天數
	public static int getDay(Calendar c,int year,int startMON,int endMON)
	{
		//定義天數和變量
		int sum = 0;
		//遍歷每個月的天數
		for(int i=0;i<=endMON-startMON;i++)
		{
			//設定第二個月的第一天,循環一次後設定下個月爲處世月,因爲0爲一月份所以startMON要加1
			c.set(year,startMON+i,1);
			//獲取前一個月的天數
			c.add(Calendar.DAY_OF_MONTH,-1);
			//將每個月的天數累加
			sum += c.get(Calendar.DAY_OF_MONTH);
			//循環後,要相應加上i個月
			c.add(Calendar.MONTH,i+1);
		}
		return sum;
	}
}

五、Math-Random類

1、概述:

Math類中全爲靜態方法,都是數學中的一些計算方法。

2、方法:

1)double ceil(double d)      --->   返回大於指定數據的最小整數
2)double floor(double d)    --->   返回小於指定數據的最大整數

3)double pow(double a,double b)         --->   返回a的b次方
4)double/float round(double/float m)    --->   返回m四捨五入的值

5)double random()    --->   返回正號的double值,是一個 0<=X<1.0 的隨機數X

三、Random類

這是一個java.util中的一個單獨的類,獲取隨機數。與Math中的random是一樣的,不過這個類有自身的方法,可以將相應的隨機數強轉爲指定基本數據類型。

如:int nextInt(int n)

下面給出一個完整的代碼和註釋例子:

import java.util.*;
class MathDemo
{
    public static void main(String[] args)
	{
	  Random r=new Random();
	  for(int x=0;x<10;x++)
	  {
	  //int d=(int)(Math.random()*10+1);
	  int d=r.nextInt(10)+1;
	  sop(d);
	  }
	  show();
	}
	public static void show()
	{
	 //ceil方法的特點:返回大於指定數據的最小整數
	   double d=Math.ceil(12.34);
	   //floor方法的特點:返回小於指定數據的最小整數
	   double d1=Math.floor(12.34);
	   //四捨五入
	   long l=Math.round(12.34);
	   sop("d="+d);
	   sop("d1="+d1);
	   sop("l="+l);
	   //返回a的b次方
	   double d2=Math.pow(2,3);
	   sop("d2="+d2);
	}
	public static void sop(Object obj)
	{
	   System.out.println(obj);
	}
}

練習:將某一小數保留爲指定位數的小數


class MathDemo
{
	public static void main(String[] args) 
	{
		double d = round(16.6785,2);
		System.out.println("d = " + d);
	}
	//保留指定位數爲n的小數
	public static double round(double d,int n)
	{
		//將給定數擴大n倍後四捨五入,再縮小相應的倍數
		return Math.round(d*(Math.pow(10,n)))/(Math.pow(10,n));	
	}
}

最新最全的的java學習視頻教程:http://pro.net.itcast.cn/View-22-1458.aspx

                                                 -------android培訓java培訓java學習型技術博客、期待與您交流! ----------

詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章