Java时间类

Java时间类分为Date 日期类和Calendar 日历类,相信很多小伙伴在初学时会对这个两个类的用法、区别以及有什么联系会感到疑惑,似乎懂了,但又不能具体说清,今天再带你来清晰的再次认识它俩!

Date 类

为了更直观了解,话不多说,直接上代码

【参考代码】

package date;

import java.util.Date;

public class Test {
public static void main(String[] args) { Date d = new Date(); // 系统时间——运行程序时的时间
System.out.println(d); // Fri Aug 13 08:03:49 CST 2021 //使用Date类中对应的get方法用来获取具体时间:年月日,时分秒
System.out.println(d.getYear() + 1900);// 年
System.out.println(d.getMonth()+1);// 月
System.out.println(d.getDate());// 日
System.out.println(d.getHours());// 时
System.out.println(d.getMinutes());// 分
System.out.println(d.getSeconds());// 秒 //Date类常用方法getTime();
//getTime()——获取到时间的毫秒形式 返回的是long
System.out.println(d.getTime());// 1628813591697 }
}

输出结果:

Fri Aug 13 08:13:11 CST 2021

2021

8

13

8

13

11

1628813591697

注:年份是从1900年开始的;月份是从0开始的。

Markdown代码块里是不显示删除线的,这里截图给大家。通过上述get方法,Date类可以获取具体时间,不过,这些函数的 API 不易于实现国际化,官方不再推荐使用Date类来获取时间,推荐使用Calendar类。因此,这里删除线代表可以用但不推荐。

总结:对于Date类我们需要掌握:

  1. new Date() 可以获取到系统时间
  2. getTime() 能获取到时间的long形式,可以用来计算时间差

Calendar类

上面我们已经知道Date类不再推荐用来获取时间,而是推荐Calendar类,话不多说直接上代码

注:Calendar 日历类,是一个抽象类,里边提供了很多操作日历字段的方法如:YEAR、 MONTH、 DAY OF MONTH、HOUR。因此不可以去new对象。虽然抽象类不能创建对象,但是jdk官方提供了一个实例对象的操作:

​ Calendar cal = Calendar.getInstance();

我们通过这条代码就是直接造了一个Calender的对象

【参考代码】

package date;
import java.util.Calendar;
import java.util.Date; public class TestCalendar {
public static void main(String[] args) { Calendar cal = Calendar.getInstance();// 实例化对象 System.out.println(cal);//java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....] //用Calendar类get方法来获取具体时间
System.out.println(cal.get(Calendar.YEAR));// 年 2021
System.out.println(cal.get(Calendar.MONTH)+1);// 8月 月份从0开始
System.out.println(cal.get(Calendar.DATE));// 日
System.out.println(cal.get(Calendar.HOUR));// 时
System.out.println(cal.get(Calendar.MINUTE));// 分
System.out.println(cal.get(Calendar.SECOND));// 秒 //用Calendar类set方法设置时间--->用于计算
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 十年以后 2031
System.out.println(cal.get(Calendar.YEAR));
cal.set(Calendar.MONTH,cal.get(Calendar.MONTH)+4);// 3月以后 11 月份从0开始的
System.out.println(cal.get(Calendar.MONTH));
//...同理日,时分秒都可以设置并计算 }
}

输出结果:

java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....]

2021 // 年

8 // 月

13 // 日

9

5

22

2031 // 十年以后

11 //3月以后

【参考代码】

Calendar cal = Calendar.getInstance();// 实例化对象

get()方法解释:
get(你想获取的Canendar对象的信息)
例:cal.get(Calendar.YEAR);// 获取年份 set()方法解释:
set(需要设置的Calendar对象,获取该对象你需要信息)--->设置就可以用来计算
例:
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 计算十年以后
System.out.println(cal.get(Calendar.YEAR));

Date类和Calendar类相互转换:

Date类和Calendar类既然有联系那必然可以相互转换,下面这段代码让大家更直观的了解:

【参考代码】

Date d = new Date();
System.out.println(d); Calendar cal = Calendar.getInstance();//实例化对象
cal.getTime();
System.out.println(cal.getTime());
/*
输出结果:
Fri Aug 13 09:35:45 CST 2021
Fri Aug 13 09:35:45 CST 2021
*/

Calendar实例化的对象.getTime()就能获取到当前的系统时间,即一个Date对象,也就是Date d==cal.getTime();

Calendar类转成了Date类

   Calendar cal = Calendar.getInstance();
Date d = cal.getTime();

Date类转成了Calendar类

    Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

总结:对于Calendar类我们需要掌握:

  1. get()方法 获取到时间的某一部分
  2. set()方法 设置时间 - -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便
  3. getTime()方法,得到的是一个Date类型的实例
  4. setTime()方法,将Date类型的实例给到Calendar类

格式化时间

通过上面的学习,我们知道Date,Calendar类通过引用可以进行时间的格式化,将年月日、时分秒一个个例举出来,可见比较繁琐,而SimpleDateFormat类是专门帮我们格式化时间的工具类,format()方法 和 parse()方法 能够帮我们在时间和字符串之间相互转换,十分方便。它在java.text包中。

时间转成字符串:format(Date date)方法

format(Date) 帮我们把时间转成字符串,格式化时间。字符串的格式为SimpleDateFormat类定义对象时设置的时间格式

【时间格式】:yyyy-MM-dd HH:mm:ss

【参考代码】

package Simple;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter; public class Test {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d); //Thu Aug 12 08:40:08 CST 2021 不美观 //设置格式化时间的模式,我们常用yyyy-MM-dd HH:mm:ss这个字符串模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式
String s = sdf.format(d); // 格式化时间
System.out.println(s); // 2021-08-12 08:45:09
}
}

字符串转成时间:parse(String string)方法

【参考代码】

package Simple;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class Test2 {
public static void main(String[] args) throws ParseException { Scanner sc = new Scanner(System.in);
System.out.println("请输入一个时间(yyyy-MM-dd HH:mm:ss):");
String s = sc.nextLine(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(s); // 把字符串转成时间
System.out.println(d); //Thu Aug 12 12:25:21 CST 2021 }
}

程序执行,输入和输出结果如下:

请输入一个时间(yyyy-MM-dd HH:mm:ss):

2021-08-12 12:25:21

Thu Aug 12 12:25:21 CST 2021

总结

看到这里,相信各位看官都对Java中的时间类的知识和使用有了一定了解,感谢各位看到这里!愿你韶华不负,青春无悔!

注: 由于自己刚刚开始学习Java不久,语言文字描述、技术等各方面还不是很好,如果文章有任何错误和建议,请各位大佬尽情评论留言!如果这篇文章对你有些许帮助,希望可爱亲切的您点个赞推荐一手,非常感谢啦!

Java时间类从此变得清晰明了的更多相关文章

  1. java时间类简单总结

    java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个):  日期格式为:年月日时分秒(不包含毫秒部分) ...

  2. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

  3. Java时间类总结

    java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...

  4. Java 时间类

    1.System 类 2.Date 类 3.SimpleDateFormate 类 4.Calendar 类 1.System 类 得到当前的时间值.System 类不能被实例化,需要通过它的静态方法 ...

  5. Java 时间类-Calendar、Date、LocalDate/LocalTime

    1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...

  6. Java时间类(转)

    package com.chinagas.common.utils; import java.text.ParseException; import java.text.SimpleDateForma ...

  7. Java 时间类 Date 和 Calendar

    在项目中获取一个yyyy-MM-dd HH:mm:ss格式的时间字符串 package org.htsg.kits; import java.text.SimpleDateFormat; import ...

  8. Java中常见时间类的使用

    模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...

  9. Java Calendar类使用总结

    平时在浏览一些网站时,有些网站会显示出当前时间,如现在是xx年xx月xx日 xx时xx分xx秒,在实际的开发过程中,也会涉及到日期和时间的计算,Java中提供了一个专门的类Calendar来处理日期与 ...

随机推荐

  1. Defense:SMB协议漏洞利用与控制CVE-2017-7494("永恒之蓝")攻防实验

    漏洞描述 1. 服务器打开了文件/打印机共享端口445,让其能够在公网上访问 2. 共享文件拥有写入权限 3. 恶意攻击者需猜解Samba服务端共享目录的物理路径 Samba是在Linux和UNIX系 ...

  2. Vue3 + TypeScript 开发实践总结

    前言 迟来的Vue3文章,其实早在今年3月份时就把Vue3过了一遍.在去年年末又把 TypeScript 重新学了一遍,为了上 Vue3 的车,更好的开车.在上家公司4月份时,上级领导分配了一个内部的 ...

  3. 远程cmd操作

    <<PSTools.zip>><<Install_PowerCmd.exe>><<cmder_mini.zip>><< ...

  4. external-resizer 源码分析/pvc 扩容分析

    kubernetes ceph-csi分析目录导航 基于tag v0.5.0 https://github.com/kubernetes-csi/external-resizer/releases/t ...

  5. [TJOI2007]书架 题解

    文中给了你一些句子,以及让你任意插入某个位置以及查询某个位置的句子. 发现因为是句子很难搞,所以开个 map 离散一下成数字.然后在额外开一个 map 记录这个数字对应的句子. 然后你要写一种支持插入 ...

  6. C语言:强制类型转换

    #include <stdio.h> //强制类型转换 //写法:(类型标识符)变量:(类型标识符)常量:(类型标识符)(表达式):三种格式 main() { float a=7.5f; ...

  7. 夏壹队——nabcd

    我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...

  8. 关于高校表白App的NABCD项目分析

    N(Need,需求) 首先,针对本校男多女少 的具体情况,为广大本校大学生提供一个更加宽广的平台: 其次,针对当前各高校均有校园表白墙的实际情况,各表白墙难以整合在一起,使得信息不够集中的现状,我们小 ...

  9. java网络编程基础——网络基础

    java网络编程 网络编程基础 1.常用的网络拓扑结构: 星型网络.总线网络.环线网络.树形网络.星型环线网络 2.通信协议的组成 通信协议通常由3部分组成: 语义部分:用于决定通信双方对话类型 语法 ...

  10. 【模拟+排序】花生采摘 luogu-1086

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...