【Java】JDK8之前的时间日期API
1.System类的currentTimeMills()
返回当前时间与1970年1月1日0时0分0秒之间,以毫秒为单位的时间差,称为时间戳。
long time = System.currentTimeMills();
System.put.println(time); //1669365126193
2.java.util.Date类和java.sql.Date类
sql.Date是util.Date的子类。
java.util.Date类
(1)两个构造器的使用
public Date() { //Date()创建一个对应当前时间的Date对象
this(System.currentTimeMillis());
}
public Date(long date) { //创建指定毫秒数的Date对象
fastTime = date;
}
(2)两个方法的使用
public String toString() {} //显示当前的年月日时分秒
public long getTime() { //获取当前date对象对应的毫秒数(时间戳)
return getTimeImpl();
}
(3)java.sql.Date
对应数据库中的日期类型的变量。
① 创建java.sql.Date对象
java.sql.Date sqlDate = new java.sql.Date(8586988756878L);
System.out.println(sqlDate); //2242-02-10
java.sql.Date sqlDate2 = new java.sql.Date(new Date().getTime());
System.out.println(sqlDate2); //2022-11-28
② java.util.Date和java.sql.Date对象之间的转换
Date utilDate1 = new java.sql.Date(45676543456L); //utilDate是sqlDate的父类
java.sql.Date sqlDate1 = (java.sql.Date)utilDate1;
//使用utilDate的getTime方法
Date utilDate2 = new Date();
java.sql.Date sqlDate2 = new java.sql.Date(utilDate2.getTime());
3.java.text.SimpleDateFormat类
该类可以对日期Date类进行格式化和解析。
- 格式化:日期 --> 字符串
- 解析:字符串 --> 日期
//(1)默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
String stringDate = sdf.format(new Date()); //格式化
Date utilDate = sdf.parse("19-12-18 上午11:43"); //解析
//(2)按指定方式格式化和解析
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String stringDate = sdf.format(new Date()); //格式化
//要求字符串必须是符合simpleDateFormat识别的格式(sdf的构造器参数),否则抛异常
Date utilDate3 = sdf.parse("2022-11-11 23:30:24"); //解析
(1)练习一:将字符串"2020-09-18" 转换为 java.sql.Date。
(2)练习二:从1990-01-01开始三天打渔两天晒网,求今天是打渔还是晒网?
点击查看答案
//练习一
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2020-09-08");
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
//练习二
Date date1 = sdf.parse("1990-01-01");
Date date2 = new Date();
long days = (date2.getTime()-date1.getTime())/(1000*60*60*24)+1; //除以一天的毫秒数计算总天数,间隔要+1
if (days%5==1||days%5==2||days%5==3){
System.out.println("打渔");
}else if (days%5==4||days%5==0){
System.out.println("晒网");
}
4.Calender日历类
这是一个抽象类
(1)创建实例
GregorianCalendar calendar = new GregorianCalendar(); //通过其子类创建
Calendar calendar1 = Calendar.getInstance(); //通过静态方法getInstance()创建
(2)常用方法
//get()方法
int days = calendar.get(calendar.DAY_OF_MONTH);
int years = calendar.get(calendar.DAY_OF_YEAR);
System.out.println(days); //28,这个月的第28天
System.out.println(years); //332,今年的第332天
//set()方法,设置天数
calendar.set(calendar.DAY_OF_MONTH,22);
int days1 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(days1); //22
//add()方法,添加天数,可以为负数
calendar.add(calendar.DAY_OF_MONTH,-3);
int days2 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(days2); //19
(3)calender和java.util.Date之间的转换
//calendar --> Date,上面做了set、add操作所以不一样
Date date1 = calendar.getTime();
System.out.println(date1); //Sat Nov 19 14:12:25 CST 2022
System.out.println(new Date()); //Mon Nov 28 14:16:19 CST 2022
//Date --> calendar
calendar.setTime(new Date());
int days3 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(days3); //28