目录
LocalDate、LocalTime、LocalDateTime
一、1.7之前的日期 —— Date
-
java.util.Date —— java中的时间
创建:
有参创建:Date(long date);
无参创建:Date();
//导包 java.util.Date
//无参创建,当前时间
Date date = new Date();
System.out.println("当前时间" + date);
//有参创建,指定时间毫秒值
Date date1 = new Date(111111111111111L);
System.out.println("指定时间毫秒值" + date1);
-
java.sql.Date —— 数据库中的时间
创建:
有参创建:Date(long date);
//有参创建,指定时间毫秒值
//导包 java.sql.Date
Date date = new Date(111111111111111L);
System.out.println("指定时间毫秒值" + date);
-
方法
toString(); 将Date对象转成字符串对象
getTime(); 获取当前Date对象时间毫秒值
setTime(); 设置Date对象时间毫秒值
Date date = new Date(1111111111111111111L);
//toString
SyStem.out.println(date.toString());
//getTime
long l = date.getTime();
System.out.println(l);
//setTime
date.setTime(222222222222222222L);
System.out.println(date);
-
类型转换
①.sql ——> util
使用多态进行转换
//导包 java.util.Date
Date date = new java.sql.Date(1212121121212121L);
System.out.println(date);
②.util ——> sql
获取时间毫秒值,传入sql有参构造
//导包 java.util.Date
Date date = new Date();
//获取时间毫秒值
long l = date.getTime();
//传入sql有参构造
java.sql.Date d = new java.sql.Date(l);
System.out.println(d);
二、Date格式化 —— SimpleDateFormat
-
创建
①.创建默认格式
new SimpleDateFormat( );
//默认格式
SimpleDateFormat sdf = new SimpleDateFormat();
②.创建自定义格式
new SimpleDateFormat(String pattern);
自定义格式对照表:
//创建自定义格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-WW-dd");
-
转换
日期对象 ——> 字符串:format()
Date date = new Date();
//默认格式
SimpleDateFormat sdf = new SimpleDateFormat();
String str = sdf.format(date);
System.out.println(str);
//自定义格式
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-WW-dd");
String str1 = sdf1.format(date);
System.out.println(str1);
字符串 ——> 日期对象:parse()
//默认格式
String s1 = "22-5-4 下午5:12";
SimpleDateFormat sdf1 = new SimpleDateFormat();
Date date1 = sdf1.parse(s1);
System.out.println(date1);
//自定义格式
String s2 = "2022-01-04";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-WW-dd");
Date date2 = sdf2.parse(s2);
System.out.println(date2);
三、1.8之后的日期 —— LocalDateTime
-
LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime类是其中比较重要的几个类,他们的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。他们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
LocalDate:代表IOS格式和(yyyy-MM-dd) 的日期,可以存储生日、纪念日等日期。
LocalTime:表示一个时间,而不是日期。
LocalDateTime:是用来表示日期和时间。
-
创建
①.默认格式创建
LocalDateTime.now( ); 根据当前时间创建对象/指定时区的对象
//当前时间
LocalDateTime now = LocalDateTime.now();
//指定时区时间
LocalDateTime now = LocalDateTime.now(ZoneOffset.ofHours(8));
②.自定义格式创建
LocalDateTime.of( ); 根据指定日期 / 时间 创建对象
//指定 年月日时分
LocalDateTime of = LocalDateTime.of(2000, 11, 11, 11, 11);
-
常用方法
①.获取
年 | getYear |
月 | getMonthValue(数字) |
日 | getDayOfMonth |
今年第几天 | getDayOfYear |
星期 | getDayOfWeek |
时 | getHour |
分 | getMinute |
秒 | getSecond |
//默认
LocalDateTime ldt = LocalDateTime.now(ZoneOffset.ofHours(8));
System.out.println("默认:"+ldt);
//自定义
LocalDateTime zdy = LocalDateTime.of(2003, 11, 26, 0, 0);
System.out.println("自定义:"+zdy);
//获取几号
int dayOfMonth = ldt.getDayOfMonth();
System.out.println("获取日:"+ dayOfMonth);
//获取今年第几天
int dayOfYear = ldt.getDayOfYear();
System.out.println("获取今年第几天:"+dayOfYear);
//星期几
DayOfWeek dayOfWeek = ldt.getDayOfWeek();
System.out.println(dayOfWeek);
//获取月份
Month month = ldt.getMonth();
System.out.println(month);
//获取月份(数字型)
int monthValue = ldt.getMonthValue();
System.out.println("月份:"+monthValue);
//获取年
int year = ldt.getYear();
System.out.println("年:"+year);
//获取时分秒
int hour = ldt.getHour();
int minute = ldt.getMinute();
int second = ldt.getSecond();
System.out.println("时间:" + hour + ":" + minute + ":" + second);
②.修改
年 | 月 | 日 | 今年第几天 |
withYear | withMonth | withDayOfMonth | withDayOfYear |
//默认
LocalDateTime ldt = LocalDateTime.now(ZoneOffset.ofHours(8));
System.out.println("默认:"+ldt);
//自定义
LocalDateTime zdy = LocalDateTime.of(2003, 11, 26, 0, 0);
System.out.println("自定义:"+zdy);
//修改日
LocalDateTime withDayOfMonth = ldt.withDayOfMonth(1);
System.out.println("修改日:" + withDayOfMonth);
//修改年中第几天
LocalDateTime withDayOfYear = ldt.withDayOfYear(250);
System.out.println("2022年第250天:" + withDayOfYear);
//修改月份
LocalDateTime withMonth = ldt.withMonth(8);
System.out.println("2022年8月:" + withMonth);
//修改年
LocalDateTime withYear = ldt.withYear(2024);
System.out.println("2024年:" + withYear);
③.增减
年 | 月 | 周 | 日 | |
增 | plusYears | plusMonths | plusWeeks | plusDays |
减 | minusYears | minusMonths | minusWeeks | minusDays |
//默认
LocalDateTime ldt = LocalDateTime.now(ZoneOffset.ofHours(8));
System.out.println("默认:"+ldt);
//自定义
LocalDateTime zdy = LocalDateTime.of(2003, 11, 26, 0, 0);
System.out.println("自定义:"+zdy);
//增减天数
LocalDateTime plusDays = ldt.plusDays(2);
System.out.println("加两天:" + plusDays);
LocalDateTime minusDays = ldt.minusDays(2);
System.out.println("减两天:"+minusDays);
//增减周
LocalDateTime plusWeeks = ldt.plusWeeks(2);
System.out.println("增加两周:" + plusWeeks);
LocalDateTime minusWeeks = ldt.minusWeeks(2);
System.out.println("减少两周:" + minusWeeks);
//增减月
LocalDateTime plusMonths = ldt.plusMonths(1);
System.out.println("增加一个月:" + plusMonths);
LocalDateTime minusMonths = ldt.minusMonths(1);
System.out.println("减少一个月:" + minusMonths);
四、瞬时 —— Instant
-
创建
Instant.now() 格林威治时间
//格林威治时间
Instant in = Instant.now();
-
方法
方法 | 描述 |
now() | 静态方法,返回默认UTC时区的Instant类的对象 |
ofEpochMilli(long epochMilli) | 静态方法,返回在1970-01-01 00:00:00基础上指定毫秒数之后的Instant类的对象 |
atOffset(ZoneOffset offset) | 结合即时的偏移创建一个OffsetDatetime对象 即时偏移量:ZoneOffset.ofHours(int hours); |
toEpochMilli() | 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 |
Instant in = Instant.now();
//获取指定时区时间
OffsetDateTime od = in.atOffset(ZoneOffset.ofHours(8));
System.out.println(od);
//指定毫秒值
Instant is = Instant.ofEpochMilli(111111111111l);
System.out.println(is);
//获取时间戳
long te = od.toEpochSecond();
System.out.println(te);
-
日期格式化 —— DateTimeFormatter
创建
①.标准格式:DateTimeFormatter.ISO_Date_TIME;
②.本地格式:DateTimeFormatter.ofLocalizedDateTime( );
③.自定义格式:DateTimeFormatter.ofPattern( );
//创建标准格式
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
//创建本地风格
DateTimeFormatter dtf1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//创建自定义风格
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");