Java中时间相关的类和方法详解(LocalDate、LocalDateTime和LocalTime类)(包含时间格式化的方法:format)(包含时间格式符)

时间相关的类

java.time包中提供了处理时间的类(早期java.util包中的Date类已经过期)

LocalDateLocalDateTimeLocalTime类的对象封装了时间相关的数据,这3个类都是final类,且没有修改数据的方法,实体无法改变。

println()打印的是这三个类的对象的实体,不是引用

LocalDate类

调用类方法**LocalDate now()**可以返回LocalDate对象,封装了现在的时间数据。

调用类方法LocalDate of(int year ,int month,int dayOfMonth),返回的对象封装了参数指定的时间数据。

例子:

LocalDate dateNow=LocalDate.now();
LocalDate dateOther=LocalDate.of(1988,12,16)

LocalDate类的对象可以调用以下方法返回相关数据

  • int getDayOfMonth():返回这个月的第几号(日)
  • int getMonthValue():返回第几个月(1-12)
  • Month getMonth():返回第几个月 的枚举值(Month是枚举类型)。如:FEBRUARY
  • int getDayOfYear():返回当前年中的第几天,(1-366)
  • DayOfWeek getDayOfWeek():返回星期几的枚举值,如:SUNDAY、MONDAY。
  • int getYear():返回第几年
  • int lengthOfYear():返回该年所含天数,365或366
  • int lengthOfMonth():返回月含有的天数,28-31
  • boolean isLeapYear():判断是否为闰年
  • LocalDate plusMonths(long monthsToAdd)返回一个行动LocalDate对象,新对象日期是该对象日期增加monthToAdd月之后得到的日期(该参数可以取负值)
  • plusDays()、plusYears()、plusWeeks()和上面作用相似
  • int compareTo(LocalDate dataTwo):该对象和dataTwo比较,规则按年、月、日的顺序比较,某项不同时返回两者的差。返回值是正数时说明该时间比dataTwo时间晚(最多精确到日)。
  • long until(Temporal endExclusive,TemporalUnit unit);计算日期差,后面有详细介绍

LocalDateTime

相对于LocalDate类,该类的对象还可以封装时、分、秒和纳秒(一纳秒是1秒的10亿分之一)等时间数据。

该类同样可以使用LocalDateTime now()和of()返回一个对象,如:

LocalDateTime date=LocalDateTime.now():
LocalDateTime date1=LocalDate.of(1988,12,16,22,35,55,0);

LocalDateTime of(int year,int month,int dayOfMonth,int hour,int minute,int second,int nanoOfSecond),封装了年、月、日、时、分、秒、纳秒,随然没有输入星期,但是该对象仍然封装了星期几和该年总天数等。

LocalDateTime类的方法

  • int getHour():返回第几小时(0-23)

  • int getMinute():返回第几分钟(0-59)

  • int getSecond():返回第几秒(0-59)

  • int getNano():返回第几纳秒(0-999999999)

  • 上述LocalDate类的所有getXXX方法

  • plusHours()、plusSeconds()···类似与LocalDate的puls方法,可以加时分秒和纳秒,同时拥有LocalDate原本的puls方法(加天数、月数等)

  • int compareTo(LocalDatetime dataTwo):和LocalDate的方法类似

  • long until(Temporal endExclusive,TemporalUnit unit);计算日期差,后面有详细介绍

  • LocalDate toLocalDate():将自己转化为LocalDate对象,这样转化后得到的对象,就可以使用LocalDate对象可以使用的所有方法了。例如:

    System.out.println(data.toLocalDate().lengthOfYear())//返回该年的总天数
    

    LocalTime

相对于LocalDateTime类的对象,LocalTime只封装时、分、秒和纳秒等时间数据。

方法

  • 它的返回时分秒和纳秒的方法和LocalDateTime相同
  • 和两者类似的plus方法,只有加时、分、秒、纳秒的,名称和LocalDateTime的相同
  • int compareTo(Localtime dataTwo):和LocalDate的方法类似
  • long until(Temporal endExclusive,TemporalUnit unit);计算日期差,后面有详细介绍
  • 没有toLocalDate()方法

计算日期差的方法long until()

long until(Temporal endExclusive,TemporalUnit unit); 其中endExclusive是一个时间类对象,unit则决定计算时间差的方式

LocalDate、LocalDateTime和LocalTime都实现了Temporal接口,所以都可以使用这个方法。

枚举类型ChronoUnit实现了TemporalUnit接口,提供了许多枚举常量,如:YEARS、MONTHS、DAYS、HOURS、MINUTES、SECONDS、NANOS、WEEKS。

示例:假设dataStar的日期是2021-2-4,dateEnd的日期是2022-7-9,那么

dateStart.until(dateEnd,ChronoUnit.DAYS);//其值为520,天数差
dateStart.until(dateEnd,ChronoUnit.MONTHS);//其值为17,月数差
dateStart.until(dateEnd,ChronoUnit.YEARS);//其值为17,月数差

如果dateEnd小于startDate,until方法返回的是负数。在计算日期差时,不足一个单位的零头按照0计算。

时间格式化

定义:希望时间信息按照特定模式输出

format()方法(属于String的一个类方法)

String format(格式化模式,时间数据列表);

该方法返回一个String对象,其实体是“时间数据列表”按照"格式化模式"排列的字符序列。

”格式化模式“是一个用双引号括起来的字符序列,该字符序列中的字符由时间格式符普通字符所构成。例如:

"日期:%ty-%tm-%td"
  • 时间格式符是一种代表指定格式某种时间信息的符号,如:“%ty”、“%tm”。其中"%tm"就是代表二位形式几月,如;01、02、03……11、12

  • 普通字符指时间格式符除外的所有字符,如:“日”、“期”、“:”、“-”。这些字符虽然和日期的表达有关,如”日“和”期“两个字,但是却并没有具体的时间信息(如:1月2日,包含了具体信息)。这种不包含具体时间信息的字符就是普通字符。

    示例:

    LocalDate date=LocalDate.now();
    String s=String.format("%tY年%tm月%td日",date,date,date);
    

    假设当前日期是2024-5-12,那么s的实体就是"2024年05月12日"

注意

要保证,format()方法中”格式化模式“中的时间格式符的个数与”日期列表“中列出的日期个数相同。可以像例子中一样,使用逗号分隔的LocalDate对象,默认按照从左到右,使用“格式化模式”中的时间格式符来格式化“日期列表”中对应的时间对象,而普通字符保留原样。

如果希望多个时间格式符的数据都从一个时间对象中获得,可以在“格式化模式”中使用"<“,比如,”%ty-%<tm-%<td"中的3个时间格式符将会格式化同一个日期,即含有"<"的格式符将会和它前面的时间格式符一起格式化同一个日期

String s=String.format("%ty年%<tm月%<td日",date);
//这样三个时间格式符就可以使用一个时间对象了

时间格式符

常用时间格式符含义
%tY4位形式的第几年,如1999、0012、2021(带前导零)
%ty两位形式的第几年,如99、02(带前导零)
%tm两位形式的第几月,如01、11(带前导零)
%td两位形式的当月的第几天,01-31(带前导零)
%tB当前环境下的第几月的全称,如US环境下,“January”
%tb当前环境下的第几月的简称,如US环境下,“Jan”、“Feb”
%tA当前环境下的星期几的全称,如"Sunday"
%ta当前环境下的星期几的简称,如"Sun"、“Mon”
%tH两位形式,24小时制的第几小时,00-23(带前导零)
%tI两位形式,12小时制的第几小时,1-12
%tM两位形式的第几分钟,00-60(带前导零)
%tS两位形式的第几秒,00-60(带前导零)
%tN九位形式的第几纳秒,000000000-999999999(带前导零)
%tp当前地区的时间是上午还是下午,如在中国," 上午"
特殊时间格式符代表几个日期格式符组合在一起
%tR等价于 %tH:%tM
%tT等价于 %tH:%tM:%S
%tr等价于 %tI:%tM:%tS%tp(%tp的表达形式与地区有关)
%tD等价于 %tm/%td/%ty
%tF等价于 “%tY-%tm-%td”
%tc等价于 “%ta %tb %td %tT %tZ %tY” ("%tZ"好像不是时间格式符,会报错)

获取特定地区的星期格式

不同区域的星期表示方法不同。如,星期四在美国用Thu(Thursday)作为简称(全称),在日本用”木“(木曜日)作为简称(全称)。

可以使用format()方法的一个重载方法,指定特定地区的星期格式

String format(Locale locale,格式化模式,日期列表);

locale是Locale类的对象,用于表示地域。

Locale类的Static常量都是Locale对象。如:Locale.US表示美国,(US就是Locale的一个Static常量)Locale.JAPAN表示日本。

String s=String.format(Locale.US,"%tA",date);
//若date中的数据是星期四,那么s="Thursday"

如果不设置特定地区,那么locale会读取系统的地区设置。如在中国,locale=Locale.CHINA

创作不易,各位看官点赞支持一下吧

  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EEEzhenliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值