最近在看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();
}
}
}
結果截圖: