问题描述
掌握 Date、DateFormat、SimpleDateFormat、Calendar、LocalDate 的时间格式及用法
目录
(一)Date
1.基本介绍
(1)含义:当前系统时间(未进行初始化)
(2)时间原点:1970年1月1日8:00:00(进行初始化)(北京时间)
(3)毫秒值:从时间原点到当前时间经历的毫秒
(4)格式:星期 月 日 时:分:秒 时区 年
如:Sat Oct 16 11:31:02 CST 2021
- 1s=1000ms
- CST:China Standard Time(中国标准时间)
2.基本用法
(1)导入date包
(2)创建实例化对象,直接打印为当前系统时间
(3)getTime() 获取当前毫秒值
(4)setTime(x)设置距离时间原点x毫秒的时间
(5)after 和 before:判断两个日期的先后顺序
- date不能进行数学运算,但是毫秒值可以
import java.util.Date;
public class Time {
public static void main(String[] args){
Date date =new Date();//创建实例化对象
System.out.println(date);//当前系统时间
System.out.println(date.getTime());//当前毫秒值
Date date0 =new Date(0);//初始化时间
System.out.println(date0);//时间原点
date.setTime(15000);//设置距离时间原点15000毫秒(15秒)的时间
System.out.println(date);
Date date2 =new Date();
date2.setTime(1500);
Date date3 =new Date();
date3.setTime(2500);
System.out.println(date3.after(date2));
System.out.println(date3.before(date2));
}
}
输出结果如下:
- date3.after(date2):检验 date3 是否在 date2 之后,是则返回 true
- date3.before(date2):检验 date3 是否在 date2 之前,是则返回 true
(二)DateFormat
1.基本介绍
(1)含义:日期格式化
(2)抽象类:不能进行实例化(需要创建子类的对象)
(3)子类继承:SimpleDateFormat
2.SimpleDateFormat
(1)模式字母:y(年) M(月) d(天) H(时) m(分) s(秒)
(2)日期转成字符串:调用父类方法format
(3)字符串转成日期:调用父类方法parse
🔶 format
import java.text.SimpleDateFormat;
import java.util.Date;
public class Time {
public static void main(String[] args){
Date date=new Date();
System.out.println(date);
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
SimpleDateFormat sdf2=new SimpleDateFormat("yy年MM月DD日HH时mm分ss秒");
SimpleDateFormat sdf3=new SimpleDateFormat("yyyy月d日H时");
String format1=sdf1.format(date);
String format2=sdf2.format(date);
String format3=sdf3.format(date);
System.out.println(format1+"\n"+format2+"\n"+format3);
}
}
输出结果如下:
- DD日 表示从当前年份算起的天数,dd日 表示从当前月份算起的天数
🔶parse
- 日期格式要与输入字符串格式一致
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Time {
public static void main(String[] args) throws ParseException{
String time1 ="2021年10月17日";
String time2 ="2021-10-17";
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
Date parseDate1=sdf1.parse(time1);
Date parseDate2=sdf2.parse(time2);
System.out.println(parseDate1+"\n"+parseDate2);
}
}
输出结果如下:
(三)Calendar
1.基本介绍
(1)含义:日历(包括 年 月 日 时 分 秒 星期 字段)
(2)抽象类:不能进行实例化(需要创建子类的对象)
(3)子类继承:GregorianCalendar
2.GregorianCalendar
(1)getinstance方法:获取系统日历
(2)get方法:获取某个字段
(3)set方法:设定日期
(4)getTime方法:将日历对象转化成Date对象
(5)add方法:增加日历字段的偏移量
- Calendar里的字段都是 int 型
- Date类的getTime方法得到的是当前时间的毫秒值
import java.util.Calendar;
public class Time {
public static void main(String[] args){
Calendar cal =Calendar.getInstance();//获取系统日历
int year =cal.get(Calendar.YEAR);//获取年份
int month =cal.get(Calendar.MONTH)+1;//获取月份(罗马儒略历中一年中的第一个月是 JANUARY,值为0;最后一个月取决于一年中的月份个数)
int day =cal.get(Calendar.DAY_OF_MONTH);//获取日
int hour =cal.get(Calendar.HOUR_OF_DAY);//获取时
int minute =cal.get(Calendar.MINUTE);//获取分
int second =cal.get(Calendar.SECOND);//获取秒
int week =cal.get(Calendar.DAY_OF_WEEK)+1;//获取星期(一周从周日开始)
int weeks =cal.get(Calendar.WEEK_OF_YEAR);//获取第几周
System.out.println(year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒"+"星期"+week+"第"+weeks+"周");
cal.set(Calendar.YEAR,2002);//设置年份为2002年
cal.set(Calendar.MONTH,8);//设置月份为9月
cal.set(Calendar.DAY_OF_MONTH,12);//设置日子是12号
System.out.println(cal.getTime());//将日历对象转化为date对象
cal.set(2002, 3, 16, 13, 28,21);//设置时间为2002年4月16日13时28分21秒
System.out.println(cal.getTime());
cal.add(Calendar.YEAR,1);//年份向后偏移1年(与设置的日期相比较)
cal.add(Calendar.MONTH,1);//月份向后偏移1月
cal.add(Calendar.DAY_OF_MONTH,1);//日子向后偏移1天
System.out.println(cal.getTime());//将日历对象转化为date对象
}
}
输出结果如下:
(四)LocalDate
1.基本介绍
(1)含义:本地日期
(2)字段:年 月 日
- LocalDate不包含时间,LocalTime不包含日期
2.基本用法
(1)now:获取系统日期
(2)of:自定义设置日期
(3)get:获取日期字段
(4)with:设置日期字段
(5)plus:设置日期字段向后偏移量
(6)minus:设置日期字段向前偏移量
import java.time.LocalDate;
public class Time {
public static void main(String[] args){
LocalDate ld_now = LocalDate.now();//获取系统日期
System.out.println(ld_now);
LocalDate ld_of = LocalDate.of(2002,9,12);//自定义设置日期
System.out.println(ld_of);
LocalDate ld = LocalDate.now();
int year =ld.getYear();//获取系统年份
int month =ld.getMonthValue();//获取系统月份
int day =ld.getDayOfMonth();//获取系统日
System.out.println(year+"年"+month+"月"+day+"日");
LocalDate newLocal =ld.withYear(2023).withMonth(2).withDayOfMonth(15);//设置日期字段为2023年2月15日
System.out.println(newLocal);
LocalDate plusLocal =ld.plusYears(1).plusMonths(2).plusDays(3);//设置日期字段向后偏移1年2月3天
LocalDate minusLocal =ld.minusYears(1).minusMonths(2).minusDays(3);//设置日期字段向前偏移1年2月3天
System.out.println(plusLocal+"\n"+minusLocal);
}
}
输出结果如下: