三、时间处理相关类
Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。
Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。
示例:
package cn.tanjianjie.test;import java.util.Date;/** * 测试Date类的常见用法 */public class TestDate { public static void main(String[] args){ //获得当前电脑时刻 Date d=new Date(); System.out.println(d); //获得毫秒数 Date d1=new Date(2000); System.out.println(d1); System.out.println(d.getTime());//返回自1970年1月1日08:00:00GMT以来此Date对象表示的毫秒数 Date d2=new Date(); System.out.println(d2.getTime()); System.out.println(d2.after(d));//d2>d=true;d2<d=false Date d3=new Date(2020-1900,3,10);//表示2020年4月10日 System.out.println(d3); }}运行结果:
DateFormat类的作用:把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,一般使用它的子类SimpDateFormat类来实现。示例:
package cn.tanjianjie.test;import java.text.ParseException;import java.util.Date;import java.text.SimpleDateFormat;public class DateFormat { public static void main(String[] args) throws ParseException { //把时间对象按照“格式字符串指定的格式”转换成相应的字符串 SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str=df.format(new Date(4000000)); System.out.println(str); //把字符串对象按照“格式字符串指定的格式”转换成相应的时间对象 SimpleDateFormat df2= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date=df2.parse("2019-01-26 10:30:34"); System.out.println(date);
//输出今天是这个月中第几天 SimpleDateFormat df3= new SimpleDateFormat("D"); String str3=df3.format(new Date()); System.out.println(str3);
}}运行结果:
Calender日历类:
Calender类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示与计算。
GregorianCalender是Canlender的一个子类,提供了世界上大多数国家、地区使用的标准日历系统。
注意:月份的表示,一月为0,二月为1,以此类推十二月为11。
示例:
package cn.tanjianjie.test;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class TestCalendar { public static void main(String[] args) { //获得日期相关元素 Calendar calendar = new GregorianCalendar(2019, 1, 26, 10, 30, 34); int year = calendar.get(calendar.YEAR); int month = calendar.get(calendar.MONTH); int day = calendar.get(calendar.DATE);//也可以使用DAY_OF_MONTH. int weekday = calendar.get(calendar.DAY_OF_WEEK);//星期几。1-7.1表示星期天,2表示星期一,以此类推7表示星期六 System.out.println(year); System.out.println(month); System.out.println(day); System.out.println(weekday); //设置日期相关元素 Calendar c2 = new GregorianCalendar(); c2.set(Calendar.YEAR, 2019); System.out.println(c2); //日期的计算 Calendar c3 = new GregorianCalendar(); c3.add(Calendar.DAY_OF_WEEK, -2);//星期中往前两天 System.out.println(c3); //日期对象和时间对象的转化 Date d4 = c3.getTime(); Calendar c4 = new GregorianCalendar(); c4.setTime(new Date());//时间对象转化成日期对象 printCalendar(c4); } public static void printCalendar(Calendar c){ //打印:2019年01月26日 11:23:29 周六 int year=c.get(Calendar.YEAR); int month=c.get(Calendar.MONTH); int date=c.get(Calendar.DAY_OF_MONTH); int dateweek=c.get(Calendar.DAY_OF_WEEK); String dayweek2=dateweek==0?"日":dateweek+""; int hour=c.get(Calendar.HOUR); int minute=c.get(Calendar.MINUTE); int second=c.get(Calendar.SECOND); System.out.println(year+"年"+month+"月"+date+"日"+hour+"时"+minute+"分"+second+"秒"+" 周"+dayweek2); }}运行结果:
可视化日历程序练习:
package cn.tanjianjie.test;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/** * 可视化日历程序 * @author Gsan */public class TestCalendar2 { public static void main(String[] args) throws ParseException { System.out.println("格式为:2019-2-6"); Scanner scanner=new Scanner(System.in); String str=scanner.nextLine(); SimpleDateFormat df=new SimpleDateFormat("yyy-MM-dd"); Date date=df.parse(str);//把字符串对象转换成时间对象 Calendar c=new GregorianCalendar();//获得日期元素 c.setTime(date); System.out.println("日\t一\t二\t三\t四\t五\t六"); int day=c.get(Calendar.DAY_OF_MONTH);//获得日期 int days=c.getActualMaximum(Calendar.DATE);//取到最大一天,防止后面接下一月的最大天数 c.set(Calendar.DAY_OF_MONTH,1); //日历前面的空格,方便接上一个月 for(int i=0;i<c.get(Calendar.DAY_OF_WEEK)-1;i++){ System.out.print("\t"); } for(int i=1;i<=days;i++){//获得一个月的时间29就是29,28就是28,30就是30,31就是31 if(day==c.get(Calendar.DAY_OF_MONTH)){//当天加*号 System.out.print(c.get(Calendar.DAY_OF_MONTH)+"*\t"); }else{ System.out.print(c.get(Calendar.DAY_OF_MONTH)+"\t"); } if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){ System.out.println();//换行 } c.add(Calendar.DAY_OF_MONTH,1);//每打印一次就加一 } }}
运行结果: