【Java 日期】日期类 概述、总结
2023-09-27 14:22:51 时间
日期类 概述、总结
一、引导
经常做测试的小伙伴,一定对这句代码非常熟悉:
System.currentTimeMillis() //输出当前时间,并以毫秒形式表示
它用于输出当前时间,并以毫秒形式表示,其返回值为long长整型。
long a = System.currentTimeMillis();
System.out.println(a);
运行结果如下:
我们常用它计算一个程序的大致运行时间:
long a = System.currentTimeMillis(); //输出当前时间,并以毫秒形式表示
for (int i = 0; i < 10000; i++) {
System.out.print("*");
}
long b = System.currentTimeMillis(); //输出当前时间,并以毫秒形式表示
System.out.println("\n" + (b - a)); //输出两次时间差值,计算出大致运行的毫秒数
运行结果如下:
-
可以看到这个程序大致的运行时间为38毫秒。
-
但我们用它计算时间,不仅复杂,而且不能指定任意时间。
-
所以我们在计算日期时间时,可使用其他常用类来解决这个问题。
二、常用日期类
1、Date类
- Date类位于java的util包
- 其使用方法如下:
Date d = new Date(); //默认空参,代表设定时间为当前时刻
System.out.println(d); //打印输出日期
运行结果如下:
long mills = 100000; //代表指定时间的毫秒数
Date d = new Date(mills); //将毫秒数传入Date类的构造方法,会将其转化为相应的日期
System.out.println(d); //打印输出日期
运行结果如下:
① getTime
- getTime 方法用于获取当前毫秒数,等同于 System.currentTimeMillis()。
Date date = new Date();
System.out.println(date.getTime());
System.out.println(System.currentTimeMillis());
运行结果如下:
- 可以看到Date类并不方便我们使用所以,我们使用其他类,来帮助我们对Date完成格式化操作,这个类就是SimpleDateFormat。
2、SimpleDateFormat类
- SimpleDateFormat类位于java的text包
- SimpleDateFormat用于将Date类对象按照我们所期望的格式,转化为字符串;也可以进行逆向转换。
- 类似于正则表达式,我么需要一个模式字符串用于匹配,常用模式如下:
字符 | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
h | 时(12小时制) |
H | 时(24小时制) |
m | 分 |
s | 秒 |
① parse
- 根据模式字符串进行转换,将字符串转换为Date对象
// 字符串-->Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//定义模式字符串
String pattern = "2021-05-07";
//转换
Date date = sdf.parse(pattern);
//打印输出
System.out.println(date);
运行结果如下:
② format
- 根据模式字符串进行转换,将Date对象转换为字符串
// Date-->String
Date date2 = new Date();
//定义模式字符串
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
//转换
String pattern2 = sdf2.format(date2);
//打印输出
System.out.println(pattern2);
运行结果如下:
3、Calendar类
- Calendar类位于java的util包
- 其使用方法如下:
Calendar c = Calendar.getInstance();
System.out.println(c);
运行结果如下:
java.util.GregorianCalendar[time=1620527224588,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=4,WEEK_OF_YEAR=20,WEEK_OF_MONTH=3,DAY_OF_MONTH=9,DAY_OF_YEAR=129,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=27,SECOND=4,MILLISECOND=588,ZONE_OFFSET=28800000,DST_OFFSET=0]
- 可以看到,我们从中难以提取信息,但可以使用其自带的get方法,提取常用信息。
① set
- set方法用于给Calendar对象设置日期时间,一般使用三种设置方式,分别为:
- 设置年、月、日
- 1、set(int year, int month, int date)
- 设置年、月、日、时、分
- 2、set(int year, int month, int date, int hourOfDay, int minute)
- 设置年、月、日、时、分、秒
- 3、set(int year, int month, int date, int hourOfDay, int minute, int second)
使用方法如下:
//获取Calendar类实例
Calendar d = Calendar.getInstance();
//设置Calendar类对象
//年月日设置
//设置日期为 202年2月22日
d.set(2021,2,22);
//设置日期为 202年2月22日11时30分
d.set(2021,2,22,11,30);
//设置日期为 202年2月22日11时30分25秒
d.set(2021,2,22,11,30,25);
② get
- get方法用于获取Calendar对象的日期时间:
常用参数如下:
取值 | 参数 |
---|---|
年 | Calendar.YEAR |
月 | Calendar.MONTH |
日 | Calendar.DAY_OF_MONTH |
时 | Calendar.HOUR_OF_DAY |
分 | Calendar.MINUTE |
秒 | Calendar.SECOND |
毫秒 | Calendar.MILLISECOND |
下面,让我们打印刚刚用set方法设置的时间:
//打印设置时间
System.out.print(d.get(Calendar.YEAR) + "年");
System.out.print(d.get(Calendar.MONTH) + "月");
System.out.print(d.get(Calendar.DAY_OF_MONTH) + "日");
System.out.print(d.get(Calendar.HOUR_OF_DAY) + "时");
System.out.print(d.get(Calendar.MINUTE) + "分");
System.out.print(d.get(Calendar.SECOND) + "秒");
运行结果如下:
③ getTime
- 该方法没有参数,返回一个Date对象,它使得我们可以更方便地将Calendar对象转换为Date对象。
打印Date对象相关信息:
Date date = d.getTime();
System.out.println(date);
运行结果如下:
相关方法
4、LocalDate类
- LocalDate类位于java的time包
- LocalDate类的构造方法是私有的,我们不能通过简单的方法实例化:
→ 两种实例化方法
1、now
- 一般使用空参的 now 方法可直接获得当前时区的时间。
- 如有特殊需求,可将时区作为参数传入。
获得的localDate对象,可以直接打印:
//获取当前时间
LocalDate localDate = LocalDate.now();
//打印当前时间
System.out.println(localDate);
运行结果如下:
2、of
- of 方法适用于设置自己想要的日期,传入 参数分别为 年、月、日 :
设置时间,并打印输出:
//设置期望时间
LocalDate localDate = LocalDate.of(2021,2,22);
//打印输出
System.out.println(localDate);
运行结果如下:
① getYear
- 故名思义,getYear 方法用于获取年份值。
② getMonthValue
- getMonthValue 方法用于用于获取月份值。
- 方法名为 getMonthValue() 而非 getMonth(),getMonth()将会返回一个Month对象,而非月份值。
③ getDayOfMonth
- getDayOfMonth 方法用于用于获取一天在是该月的多少天,也就是平时所说的日期。
使用以上方法,获取信息:
//设置期望时间
LocalDate localDate = LocalDate.of(2021,2,22);
//获取并打印年份
System.out.print(localDate.getYear()+"年");
//获取并打印月份
//【注意】方法名为 getMonthValue() 而非 getMonth(),getMonth()将会返回一个Month对象,而非月份值
System.out.print(localDate.getMonthValue()+"月");
//获取并打印日期
System.out.print(localDate.getDayOfMonth()+"日");
运行结果如下:
5、LocalTime类
- LocalTime类位于java的time包
- 与LocalDate类似,LocalTime类的构造方法是私有的,我们不能通过简单的方法实例化:
→ 两种实例化方法
1、now
- 使用空参的 now 方法可直接获得当前时区的时间。
1、of
- 同样,用于设置期望时间,不同的是,它有三种传参方式 :
//设置期望时间
LocalTime localTime = LocalTime.of(12,22,22);
//打印时间
System.out.println(localTime);
运行结果如下:
① getHour
- getHour 方法用于用于获取时。
② getMinute
- getMinute 方法用于用于获取分。
③ getSecond
- getSecond 方法用于用于获取秒。
使用以上方法,获取信息:
//设置期望时间
LocalTime localTime = LocalTime.of(12,22,22);
//打印时、分、秒
System.out.print(localTime.getHour()+"时");
System.out.print(localTime.getMinute()+"分");
System.out.print(localTime.getSecond()+"秒");
运行结果如下:
6、LocalDateTime类
- LocalDateTime类位于java的time包
LocalDateTime类用法与LocalDate、LocalTIme相同,唯一不同的是它可以获得完整的年、月、日、时、分、秒,这里我们不做赘述。
//设置期望时间
LocalDateTime localDateTime = LocalDateTime.of(2021,2,22,11,30,22);
//打印完整日期
System.out.print(localDateTime.getYear()+"年");
System.out.print(localDateTime.getMonthValue()+"月");
System.out.print(localDateTime.getDayOfMonth()+"日 ");
System.out.print(localDateTime.getHour()+"时");
System.out.print(localDateTime.getMinute()+"分");
System.out.print(localDateTime.getSecond()+"秒");
运行结果如下:
7、DateTimeFormatter类
- DateTimeFormatter类位于java的time包
- 用于实现LocalDate与String之间的转换:
① parse
- parse方法用于将String字符串 转化为 LocalDate对象
// String-->LocalDate
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse("2021-05-06", dateTimeFormatter1);
System.out.println(localDate);
② ofPattern
- ofPattern 方法用于将LocalDate对象 转化为 String字符串
// LocalDate-->String
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String s = dateTimeFormatter2.format(localDate);
System.out.println(s);
8、Period类
- Period类位于java的time包
- 它拥有一个私有的构造方法,所以,不能直接实例化。
→ 一种实例化方法
1、between
- 它用于获取时间的差值以计算时间周期
- 需传入两个参数,分别为 两个LocalDate对象
① getYears
- 获取两天年数差值
- 不满一个年的天数不算一年
② getMonths
- 获取两天月数差值
- 不满一个月的天数不算一月
③ getDays
- 获取两天天数差值
以上方法的具体使用如下:
LocalDate localDate1 = LocalDate.of(2020,5,22);
LocalDate localDate2 = LocalDate.of(2021,2,24);
Period period = Period.between(localDate1,localDate2);
//获取两天年数差值,不满一个年的天数则不算做一年
System.out.println("年数差值:"+period.getYears());
//获取两天月数差值,不满一个月的天数则不算做一月
System.out.println("月数差值:"+period.getMonths());
//获取两天天数差值
System.out.println("天数差值:"+period.getDays());
运行结果如下:
相关文章
- Java中ClassNotFoundException V.S NoClassDefFoundException 区别
- java.util.date和java.sql.date,以及jdk1.8新增日期API
- c++中继承和java中继承的对比
- java transient关键字作用,使用场景
- Java 日期转long型毫秒数
- Java 基础【12】 日期类型
- Java学习笔记——多态性Polymorphism
- java反射机制
- Java基础——常用类之日期时间类
- java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
- Java开发之@PostConstruct和@PreDestroy注解
- Java 毫秒转换为日期类型、日期转换为毫秒
- java上传组件commons-fileupload的一些使用方法
- 【Java】Eclipse 快捷键
- 【Java笔记】泛型
- Error:java: 发现警告, 但指定了 -Werror
- Java 日期时间字符串转成Date及时间日期格式标识符说明
- JAVA日期处理总结