每次面试必问的二叉树的设计与编码,Java7日期时间API

// date1是否date2之后

System.out.println(date1.after(date2));

// date1和date2是否相等

System.out.println(date1.equals(date2));

// 返回自1970年1月1日以来经过的毫秒数

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

}

输出结果

Sat Dec 05 12:49:59 CST 2020

Sat Dec 05 17:39:23 CST 2020

false

false

1607161163418

SimpleDateFormat


DateFormat是抽象类,能够快速地进行日期与时间的格式化输出和字符串解析,它与以语言无关的方式格式化并解析日期或时间,所以使用其子类SimpleDateFormat实现日期和字符串的相互转换。

使用SimpleDateFormat测试日期和字符串的相互转换

/**

  • 使用SimpleDateFormat测试日期和字符串的相互转换

  • @throws ParseException

*/

@Test

public void testSimpleDateFormat() throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

// 将字符串转化为日期

Date date = sdf.parse(“2020-12-05 16:31:39”);

System.out.println(date);

// 将日期转化为字符串

SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);

String str = dateFormat.format(date);

System.out.println(str);

}

输出结果

Sat Dec 05 16:31:39 CST 2020

2020/12/05 16:31:39

DateFormat格式代码

要指定时间格式,请使用时间模式字符串。 在此模式中,所有ASCII字母都保留为模式字母,其定义如下

| 编号 | 字符 | 描述 | 示例 |

| — | — | — | — |

| 1 | G | 时代指示符 | AD |

| 2 | y | 四位数的年份值 | 2019 |

| 3 | M | 月份 | July or 07 |

| 4 | d | 日 | 10 |

| 5 | h | 小时 A.M./P.M. (1~12) | 12 |

| 6 | H | 24小时制的小时表示 (0~23) | 22 |

| 7 | m | 分钟 | 30 |

| 8 | s | 秒钟 | 55 |

| 9 | S | 毫秒 | 234 |

| 10 | E | 星期几 | Tuesday |

| 11 | D | 一年中的第几天 | 360 |

| 12 | F | 一个月中的某一天 | 2 (second Wed. in July) |

| 13 | w | 一年中的第几个星期 | 40 |

| 14 | W | 一月中的第几个星期 | 1 |

| 15 | a | A.M./P.M. 标记 | PM |

| 16 | k | 小时 (1~24) | 24 |

| 17 | K | 小时 A.M./P.M. (0~11) | 10 |

| 18 | z | 时区 | Eastern Standard Time |

| 19 | ‘ | 转义文本 | Delimiter |

| 20 | " | 单引号 | ` |

Calendar


相比较于 java.util.Datejava.util.Calendar 除了承载毫秒级的 Unix 时间,还承载了时区信息(默认使用系统的时区),并且,提供了诸多接口:“年、月、日、时、分、秒” 字段的获取与设置,时区设置,日期与时间的偏移调整。

从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

创建一个代表系统当前日期的Calendar对象

// 默认是当前日期

Calendar c = Calendar.getInstance();

创建一个指定日期的Calendar对象

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

// 创建一个代表2020年6月12日的Calendar对象

Calendar c1 = Calendar.getInstance();

c1.set(2020, 6 - 1, 12);

Calendar类对象字段类型

Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

| 序号 | 常量 | 描述 |

| — | :-- | :-- |

| 1 | Calendar.YEAR | 年份 |

| 2 | Calendar.MONTH | 月份 |

| 3 | Calendar.DATE | 日期 |

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

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

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

| 7 | Calendar.MINUTE | 分钟 |

| 8 | Calendar.SECOND | 秒 |

| 9 | Calendar.DAY_OF_WEEK | 星期几 |

Calendar类对象信息的设置

set设置

Calendar c1 = Calendar.getInstance();

// 把Calendar对象c1的年月日分别设这为:2020、6、12

public final void set(int year,int month,int date)

c1.set(2020, 6-1, 12);

add设置

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算

Calendar c1 = Calendar.getInstance();

c1.add(Calendar.DATE, 10);

其他字段属性的add的意义以此类推

测试Calendar类对象信息的获得,创建一个指定日期的Calendar对象

测试Calendar类对象信息的获得,创建一个指定日期的Calendar对象

/**

  • 测试Calendar类对象信息的获得,创建一个指定日期的Calendar对象

*/

@Test

public void testCalendar() {

Calendar c1 = Calendar.getInstance();

// 获得年份

int year = c1.get(Calendar.YEAR);

// 获得月份

int month = c1.get(Calendar.MONTH) + 1;

// 获得日期

int date = c1.get(Calendar.DATE);

// 获得小时

int hour = c1.get(Calendar.HOUR_OF_DAY);

// 获得分钟

int minute = c1.get(Calendar.MINUTE);

// 获得秒

int second = c1.get(Calendar.SECOND);

// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)

int day = c1.get(Calendar.DAY_OF_WEEK);

System.out.println(“星期” + day + " " + year + “-” + month + “-” + date + " " + hour + “:” + minute + “:” + second);

// 创建一个指定日期的Calendar对象

Calendar c2 = Calendar.getInstance();

c2.set(2020, (12 - 1), 5);

System.out.println(c2.get(Calendar.YEAR) + “年” + (c2.get(Calendar.MONTH) + 1) + “月” + c2.get(Calendar.DATE) + “日”);

}

输出结果

星期7 2020-12-5 17:42:47

2020年12月5日

GregorianCalendar


GregorianCalendar是Calendar类的子类,并提供世界上大多数国家/地区使用的标准日历系统。GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代。

构造函数与常用方法

下面列出GregorianCalendar对象的几个构造方法:

| 序号 | 构造函数 | 说明 |

| — | — | — |

| 1 | GregorianCalendar() | 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。 |

| 2 | GregorianCalendar(int year, int month, int date) | 在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar |

| 3 | GregorianCalendar(int year, int month, int date, int hour, int minute) | 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |

| 4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) | 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |

| 5 | GregorianCalendar(Locale aLocale) | 在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。 |

| 6 | GregorianCalendar(TimeZone zone) | 在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |

| 7 | GregorianCalendar(TimeZone zone, Locale aLocale) | 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |

这里是GregorianCalendar 类提供的一些有用的方法列表:

| 序号 | 方法 | 说明 |

| — | — | — |

| 1 | void add(int field, int amount) | 根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。 |

| 2 | protected void computeFields() | 转换UTC毫秒值为时间域值 |

| 3 | protected void computeTime() | 覆盖Calendar ,转换时间域值为UTC毫秒值 |

| 4 | boolean equals(Object obj) | 比较此 GregorianCalendar 与指定的 Object。 |

| 5 | int get(int field) | 获取指定字段的时间值 |

| 6 | int getActualMaximum(int field) | 返回当前日期,给定字段的最大值 |

| 7 | int getActualMinimum(int field) | 返回当前日期,给定字段的最小值 |

| 8 | int getGreatestMinimum(int field) | 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。 |

| 9 | Date getGregorianChange() | 获得格里高利历的更改日期。 |

| 10 | int getLeastMaximum(int field) | 返回此 GregorianCalendar 实例给定日历字段的最低的最大值 |

| 11 | int getMaximum(int field) | 返回此 GregorianCalendar 实例的给定日历字段的最大值。 |

| 12 | Date getTime() | 获取日历当前时间。 |

| 13 | long getTimeInMillis() | 获取用长整型表示的日历的当前时间 |

| 14 | TimeZone getTimeZone() | 获取时区。 |

| 15 | int getMinimum(int field) | 返回给定字段的最小值。 |

| 16 | int hashCode() | 重写hashCode. |

| 17 | boolean isLeapYear(int year) | 确定给定的年份是否为闰年。 |

| 18 | void roll(int field, boolean up) | 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 |

| 19 | void set(int field, int value) | 用给定的值设置时间字段。 |

| 20 | void set(int year, int month, int date) | 设置年、月、日的值。 |

| 21 | void set(int year, int month, int date, int hour, int minute) | 设置年、月、日、小时、分钟的值。 |

| 22 | void set(int year, int month, int date, int hour, int minute, int second) | 设置年、月、日、小时、分钟、秒的值。 |

| 23 | void setGregorianChange(Date date) | 设置 GregorianCalendar 的更改日期。 |

| 24 | void setTime(Date date) | 用给定的日期设置Calendar的当前时间。 |

| 25 | void setTimeInMillis(long millis) | 用给定的long型毫秒数设置Calendar的当前时间。 |

| 26 | void setTimeZone(TimeZone value) | 用给定时区值设置当前时区。 |

| 27 | String toString() | 返回代表日历的字符串。 |

测试GregorianCalendar构造方法和常用方法

/**

  • 测试GregorianCalendar构造方法和常用方法

*/

@Test

public void testGregorianCalendar() {

String months[] = {

“Jan”, “Feb”, “Mar”, “Apr”,

“May”, “Jun”, “Jul”, “Aug”,

“Sep”, “Oct”, “Nov”, “Dec”};

int year;

// 初始化 Gregorian 日历

// 使用当前时间和日期

// 默认为本地时间和时区

GregorianCalendar gcalendar = new GregorianCalendar();

// 显示当前时间和日期的信息

System.out.print("Date: ");

System.out.print(months[gcalendar.get(Calendar.MONTH)]);

System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");

System.out.println(year = gcalendar.get(Calendar.YEAR));

System.out.print("Time: ");

System.out.print(gcalendar.get(Calendar.HOUR_OF_DAY) + “:”);

System.out.print(gcalendar.get(Calendar.MINUTE) + “:”);

System.out.println(gcalendar.get(Calendar.SECOND));

// 测试当前年份是否为闰年

if (gcalendar.isLeapYear(year)) {

System.out.println(“当前年份是闰年”);

} else {

System.out.println(“当前年份不是闰年”);

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

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

image

(2)刷的算法题(还有左神的算法笔记)

image

(3)面经+真题解析+对应的相关笔记(很全面)

image

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

[外链图片转存中…(img-YO9GqoIj-1713469034327)]

(2)刷的算法题(还有左神的算法笔记)

[外链图片转存中…(img-CVuumt5L-1713469034327)]

(3)面经+真题解析+对应的相关笔记(很全面)

[外链图片转存中…(img-TCyfXjEI-1713469034327)]

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值