【java基础】Date类,Calendar类和SimpleDateFormat知识点及练习

(一)知识点:
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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值