昨天嗨皮了一天,没有写,今天继续,嘿嘿~
开始第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();
}
}
}
结果截图: