JDK8中的日期时间API
程序员文章站
2024-03-11 22:11:13
...
JDK中的新时间日期API
主要的类
-
LocalTime:表示一个时间,而不是日期。
-
LocalDate:代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期
-
LocalDateTime:是用来表示日期和时间的,这是一个最常用的类之一。
-
引进原因
- 偏移性:年份从1900开始,月份从0开始
- 可变性:日期时间应该是不变的
package DateTime; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; public class Demo09 { public static void main(String[] args) { //Date类的偏移性:创建袷日期2020-09-8 Date date1 = new Date(2020,9,8);//偏移性 System.out.println(date1); Date date2 = new Date(2020-1900,8,8);//减去偏移量才能正确创建 System.out.println(date2); } }
例一
package DateTime;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
/*
* JDK8中的日期API
* 类似与Calendar,且具有不可变性
*/
public class Demo05 {
public static void main(String[] args) {
// now()获取当前日期,时间,时间日期
LocalDate now = LocalDate.now();
LocalTime now2 = LocalTime.now();
LocalDateTime now3 = LocalDateTime.now();
System.out.println("LocalDateL:" + now);
System.out.println("LocalTime:" + now2);
System.out.println("LocalDateTime:" + now3);
// of方法:根据指定日期时间创建对象
System.out.println("**********of*************");
LocalDate date = LocalDate.of(2020, 8, 28);
LocalTime time = LocalTime.of(23, 10);
LocalDateTime dateTime = LocalDateTime.of(2020, 8, 31, 23, 18);
System.out.println("日期:"+date);
System.out.println("时间:"+time);
System.out.println("日期时间:"+dateTime);
System.out.println("*********get***********");
// get()方法
System.out.println(now.getDayOfYear());// 217
System.out.println(now.getMonthValue());// 8
System.out.println(now.getMonth());// august
System.out.println(now.getDayOfWeek());// Tuesday
System.out.println("*******with************");
// withxxx:设置相关属性
LocalDate date2 = now.withDayOfMonth(8);
System.out.println(now.getDayOfMonth());// 5
System.out.println(date2);// 返回值改变,原有的不变
System.out.println("*****plus/minus*********");
// plus :加操作
LocalDateTime plusMonths = now3.plusMonths(3);
System.out.println(plusMonths);
// minus:减多少天
LocalDateTime minusDays = now3.minusDays(5);
System.out.println(minusDays);
;
}
}
- 各种方法
- now();
- get()
- plus()
- minus()
Instant类
- 时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳
- (1 ns = 10 -9 s) 1秒 = 1000毫秒 =106微秒=109纳秒
package DateTime;
/*
* instant的使用
*/
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Demo06 {
public static void main(String[] args) {
//实例化一个对象
Instant is = Instant.now();
System.out.println(is);//本初子午线的时间,东八区加8
OffsetDateTime atOffset = is.atOffset(ZoneOffset.ofHours(8));//添加时间偏移量
//获取毫秒数
long milli = is.toEpochMilli();
System.out.println(milli);
//通过给定的毫秒数获取Instant实例
Instant instant = Instant.ofEpochMilli(milli);
System.out.println(instant);
}
}
格式化
-
格式(实例化方法)
- 预定义标准格式:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关格式:fLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
package DateTime; /* * DateTimeFoarmatter类:格式化或解析日期时间 * */ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.time.temporal.TemporalAccessor; public class Demo07 { // 方式一:ISO_LOCA_DATE_TIME;ISO_LOCA_DATE;ISO_LOCA_TIME private void DateTiemFormatter() { // TODO Auto-generated method stub // 格式化 DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;// LocalDateTime ldt = LocalDateTime.now(); String str1 = dtf.format(ldt); System.out.println(str1); // 解析 TemporalAccessor parse = dtf.parse(str1); System.out.println(parse); // 本地相关化格式:ofLocalizedDateTime() // 三种参数:FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT 适用于LocalDateTiem DateTimeFormatter dtf1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG); String str2 = dtf1.format(ldt); System.out.println(str2); // 方式三:自定义格式ofPattern() DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); String str4 = dtf3.format(LocalDateTime.now()); System.out.println(str4); // 解析 TemporalAccessor parse2 = dtf3.parse("2020-08-05T08:09:29.399Z"); System.out.println(parse2); } }
上一篇: Java删除指定文件夹下的所有内容的方法(包括此文件夹)
下一篇: JDK8之前日期时间API