zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Java 日期】日期类 概述、总结

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());

运行结果如下:
getTime

  • 可以看到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)
    set
    使用方法如下:
//获取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对象的日期时间:
    get

常用参数如下:

取值参数
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对象。
    getTime
    打印Date对象相关信息:
Date date = d.getTime();
System.out.println(date);

运行结果如下:
运行结果

相关方法

4、LocalDate类

  • LocalDate类位于java的time包
  • LocalDate类的构造方法是私有的,我们不能通过简单的方法实例化:
    LocalDate的构造方法

→ 两种实例化方法

1、now

  • 一般使用空参的 now 方法可直接获得当前时区的时间。
  • 如有特殊需求,可将时区作为参数传入。
    now
    获得的localDate对象,可以直接打印:
//获取当前时间
LocalDate localDate = LocalDate.now();
//打印当前时间
System.out.println(localDate);

运行结果如下:
运行时间

2、of

  • 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()+"日");

运行结果如下:
运行结果i

5、LocalTime类

  • LocalTime类位于java的time包
  • 与LocalDate类似,LocalTime类的构造方法是私有的,我们不能通过简单的方法实例化:
    LocalTime

→ 两种实例化方法

1、now

  • 使用空参的 now 方法可直接获得当前时区的时间。
    now

1、of

  • 同样,用于设置期望时间,不同的是,它有三种传参方式 :
    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包
  • 它拥有一个私有的构造方法,所以,不能直接实例化。
    Period

→ 一种实例化方法

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());

运行结果如下:
运行结果