昨天嗨皮了一天,没有写,今天继续,嘿嘿~

开始第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();
		}	
	}
}

接下来我们来看一看日历类,它的作用是完成某年某月某日与毫秒计时的相互转化:

java 日历展示计划 java 日历类_java 日历展示计划


java 日历展示计划 java 日历类_教学_02

下面是相关示例代码:

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();
		}
	}
}

结果截图:


java 日历展示计划 java 日历类_教学_03