Date,Calendar和SimpleDateFormat的总结

虽然经常会遇到这三个东西,但是经常是做了又忘的状态,所以特意整理了一下,提醒一下自己。

Date

Date是java.util包下的一个类,类 Date
表示特定的瞬间,精确到毫秒。
但是***从 JDK 1.1 开始,应该使用 Calendar类实现日期和时间字段之间转换,使用 DateFormat类来格式化和解析日期字符串。Date中的相应方法已废弃。***

Calendar

Calendar是java.util 包下面的一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并未操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间值可用毫秒值来表示,它是距格林威治标准时间 1970 年1月 1日的 00:00:00:000的偏移量。

根据Java API ,Calendar提供了一个类方法getInstance,以此获得此类型的一个通用对象,Calendar的getInstance返回一个Calendar对象,其日历字段值已由当前日期和时间初始化。
为什么不用~~Calendar cal=Calendar.getInstance()~~来实例化对象呢?
因为Calendar类是抽象类,而且它的构造方法是protected,所以没办法通过构造方法来创建对象,它还有一个直接子类GregorianCalendar,这个类是Calendar的实现类,那么其实getInstance方法返回的是Calendar的子类GregorianCalendar的对象。

Calendar对日历字段的操作有主要方法:

set() ,add()
主要体现在下面这段代码里面:

//有关Calendar类
		Calendar c=Calendar.getInstance();
		int year=c.get(Calendar.YEAR);
		int month=c.get(Calendar.MONTH)+1;
		int day=c.get(Calendar.DAY_OF_MONTH);
		int weekday=c.get(Calendar.DAY_OF_WEEK);
	    int hour=c.get(Calendar.HOUR);
	    int minute=c.get(Calendar.MINUTE);
	    int second=c.get(Calendar.SECOND);
	    int miliSecond=c.get(Calendar.MILLISECOND);
	    System.out.println("现在是"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒"+miliSecond+"毫秒"+",星期"+weekday);
		//修改
	    c.add(hour, 12);
	    System.out.println(c.get(Calendar.HOUR));
	    //设置
	    c.set(Calendar.YEAR, 2000);
	    System.out.println(c.get(Calendar.YEAR));
	    c.set(2018, 5, 2);
	    year =c.get(Calendar.YEAR); 
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println("现在是" + year + "年" + month + "月" + day + "日");

结果输出为:在这里插入图片描述

在这里要注意一点:
观察上面的代码,发现在取月份的时候加1了,为什么呢?
这里的月份都是从零开始的,0月表示1月,11月表示12月
但是通过上面的观察可以看到,输出星期几的时候,输出了星期七,但是我在写这段代码的时候系统时间是星期六,这是不合乎常理的,其实,西方国家普遍将星期日当做每一天的第一天,从星期日到星期六,对应的数字分别是1,2,3,4,5,6,7,所以需要减1。
减一之后结果变成了:
在这里插入图片描述

SimpleDateFormat

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
SimpleDateFormat是DateFormat抽象类的实现类,DateFormat继承Format,Format定义了编程接口,用于将语言环境敏感的对象格式化。
在格式化日期的时候,经常用到的构造方法是带一个String参数的
Public SimpleDateFormat(String pattern)
这个构造函数的意思是用给定的模式和默认的语言环境构的日期格式符号来格式化。

SimpleDateFormat中有format方法和pase方法,format方法是将Date对象转化为String字符串,pase是将字符串转化为Date对象。
下面通过代码来展示日期和字符串之间的转化。
假如我要将一个日期类型的时间格式转化成"yyyy-mm-dd"类型的字符串,需要用到format方法,
Date date=new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-mm-dd”);
sdf.format(date);
如果需要将"yyyy-mm-dd"String类型的日期转化成日期对象类型,就需要用到parse,
String str= “2017-6-17”
sdf.parse(str),这样就可以得到一个日期类型。

JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别

HH是24小时制,hh是12小时制
区别就是:大写的H是二十四小时制的小时数(0-23),小写的h是十二小时制的小时数(am/pm 1-12)

猜你喜欢

转载自blog.csdn.net/qq_41040989/article/details/88918640