文章目录
3、 日期API
获取时间戳:long System.currentTimeMillis()
3.1 JDK8之前
java.util.Date
- 构造器
- new Date():创建一个对应当前时间的Date对象
- new Date(long mills):创建指定时间戳的Date对象
- 方法
- toString():显示当前Date对象的年月日时分秒
- getTime():获取当前Date对象对应的时间戳(毫秒数)
java.sql.Date
对应数据库中日期类型的变量
- 构造器
- new Date(long millis):创建指定时间戳的Date对象
- 方法
- toString():显示当前Date对象的年月日
将java.util.Date对象转换为java.sql.Date对象:
Date date1 = new Date();
System.out.println(date1); //Tue Jan 04 11:24:28 GMT+08:00 2022
java.sql.Date date2 = new java.sql.Date(date1.getTime());
System.out.println(date2); //2022-01-04
SimpleDateFormat
对日期Date类的格式化和解析
- 格式化:日期——>字符串:调用format(Date)方法返回字符串
- 解析:字符串——>日期:调用parse(String)方法返回Date对象
- 要求:字符串必须符合SimpleDateFormat识别的格式(通过构造器参数体现)
使用默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
// 格式化:日期→字符串
Date date = new Date();
System.out.println(date); //Tue Jan 04 14:01:11 GMT+08:00 2022
String format = sdf.format(date);
System.out.println(format); //22-1-4 下午2:01
// 解析:字符串→日期
String str = "18-12-31 下午5:58";
Date date1 = sdf.parse(str);
System.out.println(date1); //Mon Dec 31 17:58:00 GMT+08:00 2018
使用带参的构造器
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
// 格式化:日期→字符串
String str = sdf.format(date);
System.out.println(str); //2022-01-04 14:07:45
// 解析:字符串→日期
Date date1 = sdf.parse("1999-05-24 14:01:30");
System.out.println(date1); //Mon May 24 14:01:30 GMT+08:00 1999
练习:将生日字符串转化为sql中date格式数据
String birth = "1999-05-24";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(birth);
System.out.println(date); //Mon May 24 00:00:00 GMT+08:00 1999
java.sql.Date date1 = new java.sql.Date(date.getTime());
System.out.println(date1); //1999-05-24
Calendar
Calendar是抽象类
实例化方法:默认为当前日期
- 创建其子类(GregorianCalendar)的对象
- 调用其静态方法getInstance()
常用方法
get():获取一些常用的属性,如该日期是该月的第几天、该年的第几天等
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
set():对calendar对象本身做修改日期
calendar.set(Calendar.DAY_OF_YEAR,200);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
add():对calendar对象本身做增加日期
calendar.add(Calendar.DAY_OF_MONTH,5);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
getTime():日历类——>Date对象
Date date = calendar.getTime();
System.out.println(date); //Sun Jul 24 14:38:38 GMT+08:00 2022
setTime():Date对象——>日历类
Date date1 = new Date();
calendar.setTime(date1);
注:月份从0开始,1月是0,2月是1…,12月是11
星期从周日开始,周日是1,周一是2…,周六是7
3.2 JDK8之后
java.time.LocalDateTime
LocalDate、LocalTime、LocalDateTime类
注:
- LocalDateTime使用频率更高
- 类似于Calendar
now():获取当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now(); //2022-01-04
LocalTime localTime = LocalTime.now(); //22:16:46.597
LocalDateTime localDateTime = LocalDateTime.now(); //2022-01-04T22:16:46.597
of():设置指定的年月日时分秒
LocalDateTime localDateTime1 = LocalDateTime.of(2022,5,24,14,20,30);
System.out.println(localDateTime1); //2022-05-24T14:20:30
withXxx():设置相关的属性并返回新的日期对象,体现不可变性
plusXxx():增加相关的属性并返回新的日期对象,体现不可变性
minusXxx():减少相关的属性并返回新的日期对象,体现不可变性
Instant
类似于java.util.Date类
now():获取本初子午线对应的标准时间
Instant now = Instant.now();
System.out.println(now); //2022-01-04T14:43:30.248Z
//添加时间的偏移量
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime); //2022-01-04T22:43:30.248+08:00
toEpochMilli():获取自1970-1-1 0:0:0开始的时间戳毫秒数
ofEpochMilli():通过给定的毫秒数,获取Instant实例
DateTimeFormatter
类似于SimpleDateFormat
实例化方式
-
方式一:预定义的标准格式。如:DateTimeFormatter.ISO_LOCAL_DATE_TIME、ISO_LOCAL_DATE、ISO_LOCAL_TIME
-
方式二:本地化相关的格式。如:DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT、FormatStyle.MEDIUM、FormatStyle.LONG、FormatStyle.FULL)
-
重点:方式三:自定义格式。如:DateTimeFormatter.ofPattern(“yyyy-MM-dd hh:mm:ss E”)
-
格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd a hh:mm:ss E"); System.out.println(dateTimeFormatter.format(LocalDateTime.now())); //2022-01-04 下午 11:09:05 星期二
-
解析
TemporalAccessor parse = dateTimeFormatter.parse("1999-05-24 下午 02:30:05 星期一"); System.out.println(parse); //{},ISO resolved to 1999-05-24T14:30:05
-
我的学习笔记有更多精彩内容哦
Java编程知识专栏