JAVA學習筆記23——DateFormat類+Calendar類+實踐:可視化日曆

最近在看JAVA教學的視頻,覺得老師講的很好,同時借用源代碼還有筆記來撰寫本系列博客,記錄自己的學習內容,同時也供看到的人學習。

昨天嗨皮了一天,沒有寫,今天繼續,嘿嘿~

開始第23篇,接着22篇的時間類,本篇介紹上篇結構圖裏面的另外兩個類:DateFormat類和Calendar類。這片裏面的代碼都帶有異常處理,博主作爲小白一隻,暫時對異常也不瞭解,所以暫不做相關的代碼解釋~

首先看DateFormat及其子類SimpleDateFormat,它們的功能主要是完成字符串和時間的相互轉化,下面是示例代碼:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
	public static void main(String[] args) {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,屬於本月的第W周");//格式化字符串
		Date d = new Date(12328888323L);
		String str = df.format(d);   //將時間對象按照格式化字符串(上面輸入的格式),轉化成字符串
		System.out.println(str);  //打印這個字符串,按照這個格式輸出~
		System.out.println("####################");
		String str2 = "1977-7-7";
		DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");   //這個格式必須和上一行的字符串格式匹配~
		try {
			Date d2 = df2.parse(str2);//parse:解析(時間)
			System.out.println(d2);   //時分秒沒有傳參默認爲0
		} catch (ParseException e) {
			e.printStackTrace();
		}	
	}
}
接下來我們來看一看日曆類,它的作用是完成某年某月某日與毫秒計時的相互轉化:



下面是相關示例代碼:

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
 * 測試日期類
 * @author dell
 *
 */
public class TestCalendar {
	public static void main(String[] args) {
		Calendar  c = new GregorianCalendar();
		c.set(2001, Calendar.FEBRUARY, 10, 12, 23, 34);//寫1和寫Calendar.FEBRUARY效果一樣。
//      以下四行的格式:c.set(int filed,int value)
//		c.set(Calendar.YEAR, 2001);
//		c.set(Calendar.MONTH, 1);   //二月
//		c.set(Calendar.DATE, 10);
//		c.setTime(new Date());
		Date d = c.getTime();
		System.out.println(d);   //這裏與前面的DateFormat不一樣,如果時分秒沒有設置則顯示當前時間。
		System.out.println(c.get(Calendar.YEAR));   //輸出年份的格式
		//測試日期計算
		c.add(Calendar.YEAR, -30);   //年份減去30年
		System.out.println(c);//輸出一大堆東西,年份在中間的位置
	}
}
最後介紹一個實踐小項目:做一個日曆,要求根據輸入的日期顯示本月份的日曆,同時先當前日期上加上*號註釋,相關解釋在代碼註釋部分體現。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
/**
 * 可視化日曆程序
 */
public class VisualCalendar {
	public static void main(String[] args) {
		System.out.println("請輸入日期(按照格式:2030-3-10):"); 
		Scanner scanner = new Scanner(System.in);
		String temp = scanner.nextLine();
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {//需要捕獲異常
			Date date = format.parse(temp);    //把輸入的字符串轉換爲時間
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);  //把這個時間傳給Calendar類的對象,實現接下來的功能(這些功能現在Date類已經實現不了了)
			int  day = calendar.get(Calendar.DATE);  //獲得當前輸入的天數,用一個局部變量保存起來
			calendar.set(Calendar.DATE, 1);     //從本月份的1號考試打印,所以先初始化
			int maxDate = calendar.getActualMaximum(Calendar.DATE);//獲得該月份的最大天數
			System.out.println("日\t一\t二\t三\t四\t五\t六");
			for(int i=1;i<calendar.get(Calendar.DAY_OF_WEEK);i++){   //打印本月1號之前的空白部分
				System.out.print('\t');
			}
			for(int i=1;i<=maxDate;i++){
				if(i==day){
					System.out.print("*");  //如果正好是今天(輸入的那個日期),則前面加一個*
				}
				System.out.print(i+"\t");
				int  w = calendar.get(Calendar.DAY_OF_WEEK);
				if(w==Calendar.SATURDAY){  //每到週六換一次行
					System.out.print('\n');
				}
				calendar.add(Calendar.DATE, 1);   //當前打印日期和i都要加1
			}
		} catch (ParseException e) {   //暫時理解爲異常的固定語句
			e.printStackTrace();
		}
	}
}
結果截圖:



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