JDK8之前的日期时间API
1.java.lang.System类
System类提供的public static long currentTimeMillis() 用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差
(此方法用于计算时间差)
long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差 称为时间戳
2.java.util.Date类
Date() 使用无参构造器创建的对象可以获取本地当前时间
Date date = new Date();
System.out.println(date);
相当于调用了 toString 方法
toString 方法 : 把时间戳变为日期格式
getTime 方法: 获得当前Date对象对应的毫秒数(时间戳)
Date(long date)
3.java.sql.Date 对应着数据库中的日期类型的变量
java.sql.Date date1 = new java.sql.Date(112231);
System.out.println(date1);
如何将java.util.Date 对象 转换为 java.sql.Date 对象(父转子)
Date date = new Date();
java.sql.Date date1 = new java.sql.Date(date.geTime()); //根据时间戳进行转换
4.java.text.SimpleDateFormat 类
对日期Date进行格式化和解析
1.两个操作
- 格式化 : 日期–>字符串
2)解析:格式化的逆过程,字符串—>日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
//格式化日期
Date date = new Date();
System.out.println(date);
String format = simpleDateFormat.format(date);//格式化
System.out.println(format);
//解析
String str = format;
Date parse = simpleDateFormat.parse(str);
System.out.println(parse);
自定义日期格式
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
String format1 = simpleDateFormat1.format(date);
System.out.println(format1);
练习: 前端传来了个日期格式的字符串 如 “2020-09-08” 数据库中的日期字段位date型 ,将这个日期存放到数据库中
String birth = "2020-09-08";
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd"); //先定一个字和传来字符串格式一样的日期类型
Date date =sdf1.parse(birth);
5.java.util.Calendar(日历类)
Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能
获取Calendar实例的方法
1)使用Calendar.getInstance()方法
//方式一
Calendar instance = Calendar.getInstance();
2)调用它的子类GregorianCalendar的构造器
常用方法
get() 获取一些常用的数据
Calendar calendar = Calendar.getInstance();
int i = calendar.get(Calendar.DAY_OF_MONTH); //获取今天是这个月第几天
System.out.println(i);
set() 修改一些新的数据
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,20); //修改今天位当前月的第四天
System.out.println(i);
add()添加
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,20); //当前月的第几天加上20
System.out.println(i);
getTime()
//方式一
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
System.out.println(time);
setTime()
JDK8之后的时间日期API
LocalDate LocalTime LocalDateTime(用的频率较高)
now() 获取当前的日期 时间 日期 + 时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
of() 获取指定日期的年月日
LocalDateTime localDateTime1 = LocalDateTime.of(2022, 8, 15, 6, 23, 14);
System.out.println(localDateTime1);
get() 可以获得很多信息
with() 将月份天数 年份天数 月份 年份 修改为指定的值并返回新的对象 原本的并不会改变 提现不可变性
minus() 减
Instant 瞬时
Instant instant = Instant.now();
System.out.println(instant);
这时创建出来的时间是本初子午线所在的时区这时就要使用偏移
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
获取对应的毫秒数
lonng m=instant.toEpochMilli();
通过给定的毫秒数,获取Instant实例
Instant instant1 = Instant.ofEpochMilli(9999999L);
DateTimeFormatter
实例化的三种方式
1.预定义的标准格式
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime localDateTime = LocalDateTime.now();
String format = formatter.format(localDateTime);//格式化
TemporalAccessor parse = formatter.parse(format);//解析
2.本地化相关的格式
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
3.自定义的格式(重点)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
formatter..format(localDateTime)//格式化
解析只要传入你自定义的类型即可