一.Date类
1.使用Date类代表当前时间
由于Date类覆盖了toString()方法,所以可以直接输出Date类型的对象
Date date = new Date();
System.out.println(date);
输出结果:Fri Oct 11 09:56:39 CST 2019
可以使用java中SimpleDateFormat类对Date的格式进行转换
SimpleDateFormat中的format()方法:将日期类型转换为字符串
SimpleDateFormat中的parse()方法:将字符串类型转换为日期类型
SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String SDFtime = dd.format(date);
System.out.println(SDFtime);
输出结果:2019-10-11 09:56:39
Date SDFdate = dd.parse(SDFtime);
System.out.println(SDFdate);
输出结果:Fri Oct 11 09:56:39 CST 2019
2.Date类还可以通过getTime()计算两个时间的差距
public static void a(){
long starTime = new Date().getTime();
String string = new String();
for(int i=0;i<50000;i++){
string = string + i;
}
long endTime = new Date().getTime();
System.out.println("这段程序运行需花费时间:"+(endTime - starTime));
}
二.Calendar类
1.使用Calendar类代表当前的时间:
由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。
Calendar c = Calendar.getInstance();
System.out.println(c);
直接输出c为:java.util.GregorianCalendar[time=1570783028180,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=284,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=37,SECOND=8,MILLISECOND=180,ZONE_OFFSET=28800000,DST_OFFSET=0]
SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dd.format(c.getTime()));
使用SimpleDateFormat转换一下结果为:2019-10-11 17:14:45
2.使用Calendar代表指定的时间:
set方法的声明为:set(int year,int month,int date)
Calendar类中:year值就是年份实际值,month值是实际月份值减1,date值为实际日期值
Calendar c = Calendar.getInstance();
c.set(2019,10-1,11);
SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dd.format(c.getTime()));
输出结果:2019-10-11 17:10:48
如果值需设置某个字段:
Calendar c = Calendar.getInstance();
例如日期值:c.set(Calendar.Date,10),代表日期为10号
-------------------------------------------------------------------
Calendar.YEAR---年份;
Calendar.MONTH---月份;
Calendar.DATE---日期;
Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段完全相同;
Calendar.HOUR---12小时制的小时数;
Calendar.HOUR_OF_DAY---24小时制的小时数;
Calendar.MINUTE---分钟;
Calendar.SECOND---秒;
Calendar.DAY_OF_WEEK---星期几。
3.获取Calendar类中的信息
Calendar c = Calendar.getInstance();
年份---c.get(c.YEAR);
月份---c.get(c.MONTH)+1;
日期---c.get(c.DAY_OF_MONTH);
小时---c.get(c.HOUR_OF_DAY);
分钟---c.get(c.MINUTE);
秒-----c.get(c.SECOND);
星期---c.get(Calendar.DAY_OF_WEEK);
在Calendar类中,周日是1,周一是2,周二是3,依次类推。
4.Calendar类的add方法:(add(int field,int amount))
该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少是amount的值为负
例如计算当前时间100天以后的日期:
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE,100);
5.计算两个日期之间相差的天数
Calendar c1 = Calendar.getInstance();
c1.set(2019,10-1,14);
Calendar c2 = Calendar.getInstance();
c2.set(2020,1-1,24);
//转换为相对时间
long t1 = c1.getTimeInMillis();
long t2 = c2.getTimeInMillis();
//计算天数
long days = (t2 - t1 )/(24*60*60*1000);
System.out.println("相距=="+days);
输出结果为:相距==102
6.输出当月的日历
//获得当前时间
Calendar c = Calendar.getInstance();
//设置代表日期为1号
c.set(Calendar.DATE,1);
//获得1号是星期几
int start = c.get(Calendar.DAY_OF_WEEK);
System.out.println("1号是星期几=="+start);
//获得当月的最大日期数
int maxday = c.getActualMaximum(Calendar.DATE);
System.out.println("当月的最大日期数=="+maxday);
//输出标题
System.out.println("日 一 二 三 四 五 六");
//输出开始的空格
for(int i = 1 ; i<start ; i++){
System.out.print(" ");
}
//输出该月的所有日期
for(int i = 1 ; i<=maxday; i++){
//输出日期数字
System.out.print(" "+i);
//输出分隔空格
System.out.print(" ");
if(i<10){
System.out.print(" ");
}
//判断是否换行
if((start + i -1) % 7 == 0 ){
System.out.println();
}
}
//换行
System.out.println();
7.获取某个时间段 前一天/后一天
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date now = null;
try {
now = sdf.parse(selectTime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = new GregorianCalendar();
calendar.setTime(now);
calendar.add(calendar.DATE, -1); //获取前一天
//calendar.add(calendar.DATE, +1); 获取后一天
now = calendar.getTime();
String yesterdayDate = sdf.format(now);