Java Review (二十一、基础类库----日期、时间类)

Calendar 类提供了大量访问、修改日期时间的方法,常用 方法如下 。

  • void add(int field, int amount): 根据日历的规则,为给定的日历宇段添加或减去指定的时间量 。

  • int get(int field): 返回指定日历宇段的值 。

  • int getActualMaximum(int field): 返回指定日历字段可能拥有的最大值 。 例如月,最大值为 11 。

  • int getActualMinimum(int field): 返回指定日历字段可能拥有的最小值 。 例如月,最小值为 0 。

  • void roll(int field, int amount): 与 addO方法类似,区别在于加上 amount 后超过了该字段所能表

示的最大范围时,也不会向上一个字段进位 。

  • void set(int field, int value): 将给定的日历宇段设置为给定值 。

  • void set(int year, int month, int date): 设置 Calendar 对象的年、月、日 三个字段的值 。

  • void set(int year, int month, int date, int hourOfDa弘 int minute, int second): 设置 Calendar 对象的年、月、日、时、分、秒 6 个字段的值 。

上面的很多方法都需要一个 int 类型的 field 参数, field 是 Calendar 类的类变量 :

| 类变量 | 描述 |

| — | — |

| Calendar.YEAR | 年份 |

| Calendar.MONTH | 月份 |

| Calendar.DATE | 日期 |

| Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |

| Calendar.HOUR | 12小时制的小时 |

| Calendar.HOUR_OF_DAY | 24小时制的小时 |

| Calendar.MINUTE | 分钟 |

| Calendar.SECOND | 秒 |

| Calendar.DAY_OF_WEEK | 星期几 |

CalendarTest.java

public class CalendarTest

{

public static void main(String[] args)

{

Calendar c = Calendar.getInstance();

// 取出年

System.out.println(c.get(YEAR));

// 取出月份

System.out.println(c.get(MONTH));

// 取出日

System.out.println(c.get(DATE));

// 分别设置年、月、日、小时、分钟、秒

c.set(2003 , 10 , 23 , 12, 32, 23); //2003-11-23 12:32:23

System.out.println(c.getTime());

// 将Calendar的年前推1年

c.add(YEAR , -1); //2002-11-23 12:32:23

System.out.println(c.getTime());

// 将Calendar的月前推8个月

c.roll(MONTH , -8); //2002-03-23 12:32:23

System.out.println(c.getTime());

Calendar cal1 = Calendar.getInstance();

cal1.set(2003, 7, 23, 0, 0 , 0); // 2003-8-23

cal1.add(MONTH, 6); //2003-8-23 => 2004-2-23

System.out.println(cal1.getTime());

Calendar cal2 = Calendar.getInstance();

cal2.set(2003, 7, 31, 0, 0 , 0); // 2003-8-31

// 因为进位到后月份改为2月,2月没有31日,自动变成29日

cal2.add(MONTH, 6); // 2003-8-31 => 2004-2-29

System.out.println(cal2.getTime());

Calendar cal3 = Calendar.getInstance();

cal3.set(2003, 7, 23, 0, 0 , 0); //2003-8-23

// MONTH字段“进位”,但YEAR字段并不增加

cal3.roll(MONTH, 6); //2003-8-23 => 2003-2-23

System.out.println(cal3.getTime());

Calendar cal4 = Calendar.getInstance();

cal4.set(2003, 7, 31, 0, 0 , 0); //2003-8-31

// MONTH字段“进位”后变成2,2月没有31日,

// YEAR字段不会改变,2003年2月只有28天

cal4.roll(MONTH, 6); //2003-8-31 => 2003-2-28

System.out.println(cal4.getTime());

}

}

API:java.util.Calnedar

API:java.util.GregorianCalendar

Java 8 新增的日期、时间包

==================================================================================

Java 8 开始专 门新增了 一个 java.time 包, 该包下包含了 如下常用的类 :

  • Clock: 该类用于获取指定时区的当前 日期、时间 。 该类可取代 System 类的 currentTimeMillis()方法,而且提供了更多方法来获取当前日期、时间 。 该类提供了大量静态方法来获取 Clock 对

象 。

  • Duration: 该类代表持续时间 。 该类可 以非常方便地获取一段时间 。

  • Instant: 代表一个具体的时刻,可以精确到纳秒 。 该类提供了静态 的 now()方法来获取当前时刻,也提供了 静态的 now(Clock clock)方法来获取 clock 对应的时刻 。 除此之外, 它还提供了 一系列minusXxx()方法在当前时刻基础上减去一段时间 , 也提供了 plusXxx()方法在当前时刻基础上加上一段时 间 。

  • LocalDate: 该类代表不带时区的日期 ,例如 2007-12-03 。 该类提供了静态的 now()方法来获取当前日期,也提供了静态的 now(Clock clock)方法来获取 clock 对应的日期 。 除此之外 , 它还提供了 rninusXxxO方法在当前年份基础上减去几年、几月、几周或几日等,也提供了 plusXxx()方法在当前年份基础上加上几年、几月、几周或几日等 。

  • LocalTime: 该类代表不带时 区的 时间,例如 10:15 : 30 。 该类提供了静态的 now()方法来获取当

前时间,也提供了静态的 now(Clock clock)方法来获取 clock 对应的时间 。 除此之外,它还提供

了 rninusXxx()方法在当前年份基础上减去几小时、几分、几秒等,也提供了plusXxx()方法在当前年份基础上加上几小时、几分、 几秒等。

  • LocalDateTime: 该类代表不带时区的日期 、时间, 例如 2007-12-03Tl 0: 15 :3 0 。 该类提供了静态的 now()方法来获取当前日期、 时间,也提供 了静态的 now(Clock clock)方法来获取 clock 对应的日期、时间 。 除此之外,它还提供了 minusXxx()方法在当前年份基础上减去几年 、几月 、几日、几小时、几分、 几秒等, 也提供 了 plusXxxO方法在当前年份基础上加上几年、几月 、几日、几小时、几分 、 几秒等 。

  • MonthDay: 该类仅代表月日 ,例如一04-12 。 该类提供了静态 的 nowO方法来获取当前月日 ,也提供了静态的 now(Clock clock)方法来获取 clock 对应的月日 。

  • Year: 该类仅代表年,例如 2014 。 该类提供了静态的 now()方法来获取当前年份 ,也提供了静态的 now(Clock clock)方法来获取 clock 对应的年份 。 除此之外,它还提供了 rninusYears()方法在当前年份基础上减去几年 ,也提供了 plusYearsO方法在当前年份基础上加上几年 。

  • YearMonth: 该类仅代表年月 ,例如 2014-04 。 该类提供了静态的 nowO方法来获取当前年月,也提供了静态的 now(Clock clock)方 法来获取 clock 对 应的年月 。 除此之外 ,它还提供了rninusXxx()方法在当前年月基础上减去几年 、几月 ,也提供了 plusXxx()方法在当前年月基础上加上几年、几月 。

  • ZonedDateTime: 该类代表一个时区化的日期 、时间 。

  • Zoneld: 该类代表一个时区 。

  • DayOtweek: 这是一个枚举类,定义了周日到周六的枚举值 。

  • Month: 这也是一个枚举类,定义了 一月到十二月的枚举值 。

NewDatePackageTest.java

public class NewDatePackageTest

{

public static void main(String[] args)

{

// -----下面是关于Clock的用法-----

// 获取当前Clock

Clock clock = Clock.systemUTC();

// 通过Clock获取当前时刻

System.out.println(“当前时刻为:” + clock.instant());

// 获取clock对应的毫秒数,与System.currentTimeMillis()输出相同

System.out.println(clock.millis());

System.out.println(System.currentTimeMillis());

// -----下面是关于Duration的用法-----

Duration d = Duration.ofSeconds(6000);

System.out.println(“6000秒相当于” + d.toMinutes() + “分”);

System.out.println(“6000秒相当于” + d.toHours() + “小时”);

System.out.println(“6000秒相当于” + d.toDays() + “天”);

// 在clock基础上增加6000秒,返回新的Clock

Clock clock2 = Clock.offset(clock, d);

// 可看到clock2与clock1相差1小时40分

System.out.println(“当前时刻加6000秒为:” +clock2.instant());

// -----下面是关于Instant的用法-----

// 获取当前时间

Instant instant = Instant.now();

System.out.println(instant);

// instant添加6000秒(即100分钟),返回新的Instant

Instant instant2 = instant.plusSeconds(6000);

System.out.println(instant2);

// 根据字符串中解析Instant对象

Instant instant3 = Instant.parse(“2014-02-23T10:12:35.342Z”);

System.out.println(instant3);

// 在instant3的基础上添加5小时4分钟

Instant instant4 = instant3.plus(Duration

.ofHours(5).plusMinutes(4));

System.out.println(instant4);

// 获取instant4的5天以前的时刻

Instant instant5 = instant4.minus(Duration.ofDays(5));

System.out.println(instant5);

// -----下面是关于LocalDate的用法-----

LocalDate localDate = LocalDate.now();

System.out.println(localDate);

// 获得2014年的第146天

localDate = LocalDate.ofYearDay(2014, 146);

System.out.println(localDate); // 2014-05-26

// 设置为2014年5月21日

localDate = LocalDate.of(2014, Month.MAY, 21);

System.out.println(localDate); // 2014-05-21

// -----下面是关于LocalTime的用法-----

// 获取当前时间

LocalTime localTime = LocalTime.now();

// 设置为22点33分

localTime = LocalTime.of(22, 33);

System.out.println(localTime); // 22:33

// 返回一天中的第5503秒

localTime = LocalTime.ofSecondOfDay(5503);

System.out.println(localTime); // 01:31:43

// -----下面是关于localDateTime的用法-----

// 获取当前日期、时间

LocalDateTime localDateTime = LocalDateTime.now();

// 当前日期、时间加上25小时3分钟

LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3);

System.out.println(“当前日期、时间的25小时3分之后:” + future);

// 下面是关于Year、YearMonth、MonthDay的用法示例-----

Year year = Year.now(); // 获取当前的年份

System.out.println(“当前年份:” + year); // 输出当前年份

year = year.plusYears(5); // 当前年份再加5年

System.out.println(“当前年份再过5年:” + year);

// 根据指定月份获取YearMonth

YearMonth ym = year.atMonth(10);

System.out.println(“year年10月:” + ym); // 输出XXXX-10,XXXX代表当前年份

// 当前年月再加5年,减3个月

ym = ym.plusYears(5).minusMonths(3);

System.out.println(“year年10月再加5年、减3个月:” + ym);

MonthDay md = MonthDay.now();

System.out.println(“当前月日:” + md); // 输出–XX-XX,代表几月几日

// 设置为5月23日

MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23);

System.out.println(“5月23日为:” + md2); // 输出–05-23

}

}

API:java.time

Java Review系列目录

⇐⇐Java Review (二十、基础类库----常用类:Object、String、StringBuffer、StringBuilder、Math)   Java Review (二十二、正则表达式)⇒⇒

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-WG2wu2SH-1715700824864)]

[外链图片转存中…(img-jo4qIwG4-1715700824864)]

[外链图片转存中…(img-Bz0KzwtN-1715700824865)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值