{
public static void main(String[] args)
{
Date d1 = new Date();
// 获取当前时间之后100ms的时间
Date d2 = new Date(System.currentTimeMillis() + 100);
System.out.println(d2);
System.out.println(d1.compareTo(d2));
System.out.println(d1.before(d2));
//自定义输出时间日期
// 获取当前时间:
Date d3 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.println(sdf.format(d3));
}
}
Date对象有几个严重的问题:它不能转换时区,除了toGMTString()可以按GMT+0:00输出外,Date总是以当前计算机系统的默认时区为基础进行输出。此外,我们也很难对日期和时间进行加减,计算两个日期相差多少天,计算某个月第一个星期一的日期等。
API:java.util.Date
============================================================================
因为 Date 类在设计上存在一些缺陷,所以 Java 提供了 Calendar 类来更好地处理日期和时间 。
Calendar 类本身是一个抽象类,它是所有日历类的模板,并提供了一些所有日历通用的方法 。
它本身不能直接实例化,程序只能创建 Calendar 子类的实例, Java 本身提供了 一个 GregorianCalendar 类,一个代表格里高利日历的子类,它代表了通常所说的公历 。
当然,也可以创建自己的 Calendar 子类,然后将它作为 Calendar 对象使用。
Calendar 类是一个抽象类,所以不能使用构造器来创建 Calendar 对象 。 但它提供了几个静态getInstance()方法来获取 Calendar 对象。
Calendar 与 Date 都是表示日期的工具类,它们 直接可以自由转换,如下代码所示 :
// 创建一个默认的 Calendar 对象
Calendar calendar = Calendar.getlnstance();
// 从 Calendar 对象中取出 Date 对象
Date date = calendar .getTime();
// 通过 Date 对象获得对应的 Calendar 对象
// 因为 Calendar / GregorianCalendar 没有构造函数可以接收 Date 对象
// 所以必须先获得一个 C alendar 实例,然后调用其 setTime () 方法
Calendar calendar2 = Calendar . getInstance();
calendar2.setTime(date);
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());
}
}
==================================================================================
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);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-UojlPimz-1712079548312)]
最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
[外链图片转存中…(img-Ek10tljB-1712079548312)]
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
[外链图片转存中…(img-zMX0aAKu-1712079548313)]