(一)知识点:
1.Date:日期类,在java.util包下,获取当前系统时间,是西历格式,已过时。
创建对象方法:
Date date=new Date();
2.Calendar:日历类,在java.util包下,获取当前系统时间。
创建对象方法:是抽象类所以不能直接创建对象,但可以通过他的静态方法得到Calendar对象:
Calendar calendar=Calendar.getInstance();
3.SimpleDateFormat:在java.text包下,转换日期文本格式的类,
创建对象格式如下:
SimpleDateFormat simpdate=new SimpleDateFormat("yyyy-MM-dd");
引号“”里面的日期文本格式标准定义如下(参照JDK API文档):
4.类型之间的转换方法:
(1)String类转换为Date类:
SimpleDateFormat simpdate=new SimpleDateFormat("yyyy-MM-dd");
String str=”2019-10-19”;
Date date=simpdate.parse(str);
//主=注:simpdate.SimpleDateFormat的parse()方法在使用时需要抛出强转异常(ParseException)。
(2)Date类转换为String类:
SimpleDateFormat simpdate=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
String str=simpdate.format(date);
(3)Calendar类转为Date类:
Calendar calendar=Calendar.getInstance();
Date date=calendar.getTime();
(4)Date类转换为Calendar类:
Date date=new Date();
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
(5)Calendar类转换为String类:
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpdate = new SimpleDateFormat("yyyy-MM-dd");
String str = simpdate.format(calendar.getTime());
(6)String类转换为Calendar类:
String str="2019-10-19";
SimpleDateFormat simpdate= new SimpleDateFormat("yyyy-MM-dd");
Date date =simpdate.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
(二)练习:
1.将当前系统时间以“2019/10/19 16:10:53:305”格式输出(最后为毫秒SS)”:
public class DateTest {
public static void main(String[] args) {
Date date=new Date();
SimpleDateFormat simpdate=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SS");
System.out.println(simpdate.format(date));
}
}
2.计算2019-10-06到2019-10-08的(天数):
//提示·Date类的getTime()方法为获取2017/01/01 00:00:00到当前的日期时间所经过的毫秒数
public class DateTest {
public static void main(String[] args) throws ParseException {
String s1="2019-10-06";
String s2="2019-10-08";
SimpleDateFormat simpdate=new SimpleDateFormat("yyyy-MM-dd");
Date date1 = simpdate.parse(s1);
Date date2=simpdate.parse(s2);
System.out.println((date2.getTime()-date1.getTime())/(1000*3600*24));
}
}
3.用Calendar输出当前系统时间,并获取当前年份月份日期:
//提示:Calender类在直接输出时会出现很长的一段字符串,所以最好转换为Date类再输出。
public class CalendarTest {
public static void main(String[] args) {
Calendar c=Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DATE));
Date d=c.getTime();
System.out.println(d);
}
}
4.写一个方法,方法只有一个参数:年(如:2019),要求返回参数年对应的每个月的最后一天的数组,数组中的日期格式举例:20190131,20191231…
方法一:采用字符串拼接形式,每循环一次就要产生很多字符串较为占用内存,因此最好使用方法二。
public class CalendarTest {
public static String[] getLastDay(String year){
int thisyear=Integer.parseInt(year);
String[] strArr=new String[12];
for(int i=0;i<12;i++){
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,thisyear);
c.set(Calendar.MONTH,i);
if(i<9){
strArr[i]=year+0+(c.get(Calendar.MONTH)+1)+c.getActualMaximum(Calendar.DAY_OF_MONTH);
}else{
strArr[i]=year+(c.get(Calendar.MONTH)+1)+c.getActualMaximum(Calendar.DAY_OF_MONTH);
}
}
return strArr;
}
public static void main(String[] args) {
String year="2019";
String[] strArr=getLastDay(year);
for(String s:strArr){
System.out.println(s);
}
}
}
方法二:字符串缓冲添加字符串,每次循环都事先清空缓冲对象内存。
public class CalendarTest {
public static void main(String[] args) {
String[] str = getLastDay(2019);
System.out.println(Arrays.toString(str));
}
static String[] getLastDay(int year) {
StringBuffer sb = new StringBuffer();
String[] str = new String[12];
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
for (int i = 0; i < 12; i++) {
//sb中所有内容清空
sb.replace(0, sb.length(), "");
c.set(Calendar.MONTH, i);
int day = c.getActualMaximum(Calendar.DAY_OF_MONTH);
//i==9 代表10月
if (i < 9) {
sb.append(year).append("0").append(i + 1).append(day);
} else {
sb.append(year).append(i + 1).append(day);
}
str[i] = sb.toString();
}
return str;
}
}
5.写一个方法,方法只有一个参数:年月(如:201904),要求返回参数年月的第一天和最后一天,如20190401,20190430:
public class CalendarTest {
public static void main(String[] args) {
String s[]=getFirstLastDay("201902");
System.out.println(s[0]);
System.out.println(s[1]);
}
public static String[] getFirstLastDay(String str) {
String year=str.substring(0,4);
String month=str.substring(4);
Calendar calendar = Calendar.getInstance();
String strDay[]=new String[2];
calendar.set(Calendar.YEAR, Integer.parseInt(year));
calendar.set(Calendar.MONTH, Integer.parseInt(month)-1);
int lastDay=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int firstDay=calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
strDay[0]=year+month+"0"+firstDay;
strDay[1]=year+month+lastDay;
return strDay;
}
}