JDK7 以前时间相关类
-
Date 时间
-
SimpleDateFormat 格式化时间
-
Calendar 日历
Date时间类
-
Date类是Java 写好的javabean类,用来描述时间,精确到毫秒
-
利用空参 —》 默认系统当前时间
-
有参 —》表示指定时间
案列:抽取时间方法
private static void extracted(){
long oneYear = 1000*60*60*24*365L;
Date date1 = new Date(0); //表示原始时间:Thu Jan 01 08:00:00 CST 1970
long time = date1.getTime(); //获取当前Date 对象从原始时间的毫秒值 这里是0
time = time+oneYear;
date1.setTime(time); //设置当前 Date对象的时间
System.out.println(date1);
}
-
缺点:
Date
类中的很多方法已经被标记为过时,因为它们不够灵活也不易于使用。
SimpleDateFormat 类
-
由于用Date 时间类显示的时间默认是
Thu Jan 01 08:00:00 CST 1970
英文的 -
那这个类的作用就出来:
-
-
格式化:把时间变成我们喜欢的格式
-
解析:把字符串表示的时间变成 Date对象 这样可用于计算
-
-
-
构造方法:
-
public SimpleDateFormat()
构造一个SimpleDateFormat 对象 ,使用默认格式public SimpleDateFormat(String pattern)
构造一个SimpleDateFormat 对象 ,使用指定格式
-
-
常用方法
-
public final String format(Date date)
格式化(日期对象 –> 字符串)public Date parse(String source)
解析(字符串 —> 日期对象)//1. 定义一个字符串表示时间 String str = "2023-11-02 11:11:08"; //2.利用空参构造创造 SimpleDateFormat对象 //细节: //创建对象的格式化要跟字符串的格式化完全一致 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = simpleDateFormat.parse(str); //打印 System.out.println(date.getTime()); //获取 Date对象时间的毫秒值 1698894668000
-
-
格式化模式
-
yyyy – MM –dd HH:mm:ss EE
-
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EE"); String format1 = simpleDateFormat1.format(date); System.out.println(format1); //1970-01-01 08:00:00 周四
-
-
yyyy年MM月dd日 HH:mm:ss
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String format1 = simpleDateFormat1.format(date); System.out.println(format1); //1970年01月01日 08:00:00
-
默认格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
Date date = new Date(0L);
String format = simpleDateFormat.format(date);
System.out.println(format); //1970/1/1 上午8:00
Calendar
-
引出:在某个时间的基础上增加一个月? —> 在原有基础上可以做,但比较麻烦
-
那可不可以只改变月份呢
-
—> Calender 代表了系统当前时间的日历对象,可以单独修改、获取时间中的年、月、日
-
细节: Calendar 是一个抽象类,不能直接创建对象
-
通过
getInstance();
静态方法获取子类对象 -
//1.获取Calendar 对象 ,但是个抽象方法,通过调用静态方法获取子类对象 //根据系统的不同时区来获取不同的日历对象,格林威治的 //把时间中的纪元、年、月、日、时、分、秒、星期 等等的都放到一个数组当中 Calendar cd = Calendar.getInstance(); System.out.println(cd); //java.util.GregorianCalendar[time=1711627839860,areFieldsSet=true,……………….calendar.ZoneInSET=0]
-
修改日历表时间
-
set() 方法
-
//2.修改日历代表的时间 Date d = new Date(0L); //在月份当中:范围是 0~11 如果获取出来的是0,实际上是1 月 //在星期中: 星期日才是一周中的第一天 他们的7 代表星期六 1代表星期天 //修改日历表时间 cd.setTime(d); cd.set(Calendar.YEAR,2024); cd.set(Calendar.MONTH,2); //要修改为三月 这里要减一 cd.set(Calendar.DAY_OF_MONTH,28);
-
set 和 get 方法都可以通过索引来获得日历的某个字段信息,但不好记忆,所以Java 把Calendar 中把索引变成了常量
-
/* 对应索引
0: 纪元
1: 年
2: 月
3: 一年中的第几周
4: 一个月中的第几周
5:一个月中的第几天 */
-
get() 方法
int year = cd.get(Calendar.YEAR); int mouth = cd.get(Calendar.MONTH)+1; int date = cd.get(Calendar.DAY_OF_MONTH); int week = cd.get(Calendar.DAY_OF_WEEK)-1; //一周中的第几天 ,从星期天开始数五天 System.out.println(year+"年 "+mouth+"月 "+date+"号"+" 星期"+week );
-
这里输出
-
2024年 3月 28号 星期4
-
-
-
add() 方法: 为某个字段增加/减少指定的值
-
//调用方法在这个基础上增加一个月 cd.add(Calendar.MONTH,+1);
-
-
缺点 :
Calendar
类也有一些问题,例如它的月份从0开始,而且它的API设计不够直观。