时间处理相关类主要包括Date类,DateFormat类,Calendar类以及其下属子类,类与类间关系如图1:
其中,Date类是核心类,DateFormat类主要用于将时间格式化(时间与指定格式字符串的相互转化),Calendar类主要针对于日期。GergorianCalendar类和SimpleDateFormat类分别是其父抽象类的实现类。
Dat类是进行时间处理的基础类,但其中大部分方法现在已经被Calendar类和DateFormate类中的方法取代,程序中使用long类型的数据来表示时间,规定1970年1月1日00:00:00为基准时间,获取系统当前时间的“时刻度值”可以使用:
long now = System.currentTimeMillis();
获取某时间刻度的毫秒数可以使用:
Date d = new Date();//无参数时返回当前时间,括号中有参数时参数表示从基准时间开始增加的毫秒数。
System.out.println(d.getTime()); //获取时间对象d的毫秒数
DateFormat是抽象类,位于java.text包中,主要用于时间和字符串的相互转化,DateFormat中规定的众多方法中,我们常用的只有两种:format()【格式化:时间—>字符串】和parse()【解析:字符串—>时间】。
在将时间转化为字符串时,对时间的指定格式化字符有规定,如图2:
DateFormat的基本用法如下(主要针对于格式化字符):
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 测试DateFormat类
* */
public class TestDateFormat {
public static void main(String[] args) throws ParseException {
/**将时间对象按照“格式字符串指定的格式”转成相应的字符串*/
//抽象类不能被new,故需要使用其实现类SimpleDateFormat()。
//SimpleDateFormat()括号中可定义格式化的日期字符串;后续可将时间转化为指定格式
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String string = df.format(new Date(1531515641)); //将毫秒数转化为指定格式的字符串
System.out.println(string);
/**将相应的字符串按照“格式字符串指定的格式”转成时间对象*/
DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
Date date = df2.parse("2018年8月8日 12时30分56秒");
System.out.println(date);
/**测试其他的格式字符*/
//利用D获取本事件对象时所处年份的第几天
DateFormat d3 = new SimpleDateFormat("D");
String s3 = d3.format(new Date()); //当前日期2020-2-8
System.out.println(s3);
}
}
Calendar类是一个抽象类,提供了日期计算的相关功能,包括年、月、日、时、分、秒的展示和计算。GergorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家和地区使用的标准日历系统。
Calendar的基本用法如下:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 测试Calendar类及其用法
* */
public class TestCalendar {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2999,10,2,12,1,50);
//可以通过get方法获取日期对象的某些属性
int year = calendar.get(Calendar.YEAR); //获取日期对象的年份
int month = calendar.get(Calendar.MONTH); //获取日期对象的月份
int weekday = calendar.get(Calendar.DAY_OF_WEEK); //星期几
int day = calendar.get(Calendar.DATE); //几号,也可以使用DAY_OF_MONTH
System.out.println(year);
System.out.println(month); //0-11,0表示1月,11表示12月
System.out.println(weekday); //1-7,1表示星期日,2表示星期一,7表示星期六
System.out.println(day);
//可以通过set方法设置日期的相关属性
Calendar c2 = new GregorianCalendar();
c2.set(Calendar.YEAR, 3000); //设置日期对象年份为3000
System.out.println(c2);
//日期的计算
Calendar c3 = new GregorianCalendar();
c3.add(Calendar.DATE, 100);
System.out.println(c3);
//日期对象和时间对象的转化
Date d4 = c3.getTime();
Calendar c4 = new GregorianCalendar();
c4.setTime(new Date());
printCal(c4);
}
public static void printCal(Calendar c){ //将日期对象按照我们想要的格式输出
//格式:例如 2020年2月8日 15:50:50 周六
int year = c.get(Calendar.YEAR);
int mon = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DATE);
int weekday = c.get(Calendar.DAY_OF_WEEK)-1;
String d1 = weekday == 0?"日":weekday+"";
int hour = c.get(Calendar.HOUR);
int min = c.get(Calendar.MINUTE);
int sec = c.get(Calendar.SECOND);
System.out.println(year+"年"+mon+"月"+day+"日 "+hour+":"+min+":"+sec+" 周"+d1);
}
}