Calendar类和Date类
java8提供的api
Date类:
Date类的时间从1970.1.1开始记起
Date方法大部分已经被弃用
首先建立一个Date的实例对象:Date d=new Date();
- 直接输出d即可获取当前的时间
- 获取年:d.getYear() 月:d.getMonth() 日:d.getDate()
年从1900开始记起,月份是0-11开始记起 - 获取时:d.getHours() 分:d. getMinutes() 秒:d.getSeconds()
- 时间的改变:可以先获取当前的时间,然后加上所需要的改变的时间值,最后再set回去
- 直接输出的时间格式不符合正常的规范,我们可以使用SimpleDateFormat来处理日期格式,然后调用我们设置好的格式进行格式化,使用format方法进行进行格式化同时返回String。同样,也能将字符串通过parse方法转换成Date类
例子是:
//格式化 处理日期格式SimpleDateFormat
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//处理日期的格式类似sf,格式化的方法format,把日期类型d2转换成str
String str=sf.format(d2);
//也能将字符串转换成Date类
Date d=sd.parse(str);
System.out.println(str);
总体代码实现如下:
public class DateDemo {
public static void main(String[] args) {
Date d=new Date(0);//传入0 从初始化给的默认值开始
System.out.println(d);
//如果不传入0 默认是电脑现在的时间
Date d2=new Date();
System.out.println(d2);
//从1900开始记起
System.out.println(d2.getYear()+1900);
//月份是0-11记起
System.out.println(d2.getMonth()+1);
System.out.println(d2.getDate());
System.out.println(d2.getHours()+":"+d2.getMinutes()+":"+d2.getSeconds());
System.out.println("-------------");
//向后推五天
d2.setDate(d2.getDate()+5);
System.out.println(d2.getMonth()+1);
System.out.println(d2.getDate());
//在此时,在向后推三个小时
d2.setHours(d2.getHours()+3);
System.out.println(d2);
//Time 毫秒 1 1000
//用time的方式,向后走五天
d2.setTime(d2.getTime()+1000*60*60*24*5);
System.out.println(d2);
//格式化 处理日期格式SimpleDateFormat
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//处理日期的格式类似sf,格式化的方法format,把日期类型d2转换成str
String str=sf.format(d2);
System.out.println(str);
}
}
Calendar类:
现在用到的时间类为Calendar类,它能够实现和Date类似的功能。
Calendar是一个抽象类,从1970.1.1记起
实例化Calendar类有两个方法:
- Calendar.getInstance()
- new GregorianCalendar() //GregorianCalendar是Calendar的一个子类,名字是格里高利
它们实例化.getTime()就能获取到当前的时间,即一个Date对象,也就是
Date d=ca.getTime();
Calendar类中的字段: - Calendar.YEAR(年)
- Calendar.MONTH(月) //也是从0开始,所以要加一
- Calendar.DATE(日)
- Calendar.HOUR(时)
- Calendar.MINUTE(分)
- Calendar.SECOND(秒)
- Calendar.DAY_OF_WEEK(一周内周几 其中周天是day1)
- Calendar.DAY_OF_MONTH(月中的第几天)
Calendar类中的方法:
- getTime()方法,得到的是一个Date类型的实例
- setTime()方法,将Date类型的实例给到Calendar类
- add(a,b)方法,a填的是Calendar类中的字段名,b是±的数量
- get(a)方法,a填的是Calendar类中的字段名,返回int
public class CalendarDemo {
public static void main(String[] args) {
//Calendar是一个是抽象类,不能直接实例化
//实例化的方法1
Calendar ca1=Calendar.getInstance();
System.out.println(ca1.getTime()); //获取当前的时间
System.out.println(ca1.getTime().getTime()); //毫秒
//实例化的方法2
Calendar ca2=new GregorianCalendar(); //GregorianCalendar是Calendar的一个子类,名字是格里高利
System.out.println(ca2.getTime());
//练习方法
//向后加5天
//Calendar.DAY_OF_MONTH 属性 字段 日期
//add操作属性
//DAY_OF_MONTH本月中的日期
// ca1.add(Calendar.DAY_OF_MONTH,+5);
System.out.println(ca1.get(Calendar.DAY_OF_MONTH));
System.out.println("----------------");
System.out.println(ca1.get(Calendar.YEAR));
System.out.println(ca1.get(Calendar.MONTH)+1);
System.out.println(ca1.get(Calendar.DATE));
System.out.println(ca1.get(Calendar.HOUR));
System.out.println(ca1.get(Calendar.MINUTE));
System.out.println(ca1.get(Calendar.SECOND));
//周几 周天day1
System.out.println("---------------------");
System.out.println(ca1.get(Calendar.DAY_OF_WEEK));
//向后走一个月
ca1.add(Calendar.MONTH,+1);
System.out.println(ca1.get(Calendar.MONTH)+1);
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d=ca1.getTime();
System.out.println(s.format(d));
}
}
小例子:
控制台可输入一个字符串 2019-09-08
要给Calendar用,并通过Calendar向后推两个月加8天
Scanner sc=new Scanner(System.in);
String s=sc.next();
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
Date d1=sd.parse(s);
Calendar c=Calendar.getInstance();
c.setTime(d1);
c.add(Calendar.DATE,+8);
c.add(Calendar.MONTH,+2);
Date d=c.getTime();
String b=sd.format(d);
System.out.println(b);