您现在的位置是:首页 > 正文

Java常用类(Date,Calendar类)

2024-02-29 15:05:29阅读 1

本文大都来自菜鸟教程:Java 日期时间 | 菜鸟教程

Date:

Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

1. 构造方法

        Date 类有如下两个构造方法。

Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。

Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。

        代码示例:

public class DateTest01 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
        Date date1 = new Date(10000);
        System.out.println(date1);
    }
}
结果:
星期 月  日  当前时间     年
Tue Sep 20 14:57:59 CST 2022
Thu Jan 01 08:00:10 CST 1970

Date类的常用方法:

1 boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2 boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3 Object clone( )
返回此对象的副本。
4 int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5 int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6 boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7 long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8 int hashCode( )
 返回此对象的哈希码值。
9 void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10 String toString( )
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

使用 SimpleDateFormat 格式化日期

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 July or 07
d 一个月的日期 10
h  A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M. 标记 PM
k 一天中的小时(1~24) 24
K  A.M./P.M. (0~11)格式小时 10
z 时区 Eastern Standard Time
' 文字定界符 Delimiter
" 单引号 `

        代码示例:

public class Test02 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
        //YYYY-MM-dd hh:mm:ss 中的字母不能任意改变的,是根据格式化编码对应的
        //其他字符  -和:还有空格 是自己定义的
        SimpleDateFormat s= new SimpleDateFormat("YYYY-MM-dd EE HH:mm:ss");
        System.out.println(s.format(date));
    }
}
结果:
Tue Sep 20 15:13:43 CST 2022
2022-09-20 星期二 15:13:43

使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

转  换  符

说    明

示    例

c

包括全部日期和时间信息

星期六 十月 27 14:21:20 CST 2007

F

"年-月-日"格式

2007-10-27

D

"月/日/年"格式

10/27/07

r

"HH:MM:SS PM"格式(12时制)

02:25:51 下午

T

"HH:MM:SS"格式(24时制)

14:28:16

R

"HH:MM"格式(24时制)

14:28

        代码示例:

public class DateTest03 {
    public static void main(String[] args) {
        // 初始化 Date 对象
        Date date = new Date();

        //c的使用
        System.out.printf("全部日期和时间信息:%tc%n",date);
        //f的使用
        System.out.printf("年-月-日格式:%tF%n",date);
        //d的使用
        System.out.printf("月/日/年格式:%tD%n",date);
        //r的使用
        System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
        //t的使用
        System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
        //R的使用
        System.out.printf("HH:MM格式(24时制):%tR",date);
    }
}
结果:
全部日期和时间信息:星期二 九月 20 15:20:26 CST 2022
年-月-日格式:2022-09-20
月/日/年格式:09/20/22
HH:MM:SS PM格式(12时制):03:20:26 下午
HH:MM:SS格式(24时制):15:20:26
HH:MM格式(24时制):15:20

Calendar:

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法getInstance()以获得此类型的一个通用的对象。  Calendar的 getInstance方法返回一个Calendar 对象,其日历字段已由当前日期和时间初始化:

         Calendar rightNow = Calendar.getInstance();

Calendar类对象字段类型

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

常量 描述
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 星期几

Calendar类对象信息的设置

Set设置

如:

Calendar c1 = Calendar.getInstance();

调用:

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

c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

利用字段类型设置

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

public void set(int field,int value)

把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算

c1.set(Calendar.DATE,10);

把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算

c1.set(Calendar.YEAR,2008);

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

Add设置

Calendar c1 = Calendar.getInstance();

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

c1.add(Calendar.DATE, 10);

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

c1.add(Calendar.DATE, -10);

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

Calendar类对象信息的获得

public class CalendarTest01 {
    public static void main(String[] args) {
        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(year+"-"+month+"-"+date+" "+hour
                +"-"+minute+"-"+second);
    }
}
结果:
2022-9-20 15-37-58

网站文章

  • cmd的常用命令分类详解

    cmd的常用命令分类详解

    上次说要写cmd,拖更了好久,这次刚好有时间就来更新了~一、cmd 是什么?cmd就是在运行在windows系统下的一个命令行窗口,可以通过Win+R打开运行框,输入cmd后回车即可打开。cmd同linux下的命令行一样,具有包括文件管理,网络操作,文本查看,进程操作在内的强大操作能力。虽然不计linux下的命令行,但是在windows下有些命令还是能帮助我们解决一些问题,提高效率的。...

    2024-02-29 15:05:02
  • 计算机网络组建对等网,计算机网络实验二组建WINDOWS环境下的对等网并共享资源.pdf...

    实验课程名称 计算机网络实验专 业 班 级学 生 姓 名学 号指 导 教 师2012 至 2013 学年第 一 学期第 1 至 18 周《计算机网络实验》实验报告__2012_ 至__201...

    2024-02-29 15:04:26
  • Vue 在 CSS 中使用 data 中定义的数据

    有时候后端传来一些动态数据,需要在页面做展示. 一般的情况都会在 CSS 中设置数据展示, 但是 CSS 中如何获取到后端传来的数据呢?

    2024-02-29 15:04:20
  • rasa-voice-inference报错Recorder is not defined

    rasa-voice-inference报错Recorder is not defined

    主要在vm.mediaRecorder = new Recorder(source,{nuwChannels : 1})报错 Recorder is not defined

    2024-02-29 15:04:12
  • Linux文件操作及原理详解

    Linux文件操作及原理详解

    哈喽,小伙伴们大家好。相信大家在学习语言时都接触过文件操作,但仅仅站在语言层面上是无法真正理解文件的,那么今天我就带大家从系统角度重新学习文件。一、引入1、几个基本概念如果小伙伴们学习过c语言文件的I...

    2024-02-29 15:03:37
  • 用devc++表白_表白 | 大三,女,想找一个长得帅的175以上的小哥哥谈恋爱

    用devc++表白_表白 | 大三,女,想找一个长得帅的175以上的小哥哥谈恋爱

    『表白置顶』戏要演就演全套的好么?一面说还是做好朋友吧快快乐乐一面对我不冷不淡拉开距离惜字如金爱搭不理,一面说我不是那种“喜欢”你了只是朋友间的喜欢了一面要求我甩甩脑喝脑残水儿忘一干二净,我真的很无语。你要是真的很烦我你给个明白话我保证真的不差你一个朋友也真的不是非得喜欢你。脑子热够了,卑微够了,挽留够了,或许在你看来还不够折磨我很有意思哈哈哈。我求你,放过我好么,彻彻底底饶了我好么 。...

    2024-02-29 15:03:29
  • 中标麒麟离线安装nginx

    中标麒麟rpm下载地址 http://download.cs2c.com.cn/neokylin/server/releases/ 7.0 arm64 包下载地址 http://download.cs...

    2024-02-29 15:03:21
  • springboot拦截器得到get和post参数

    过滤器:import org.apache.logging.log4j.core.config.Order;import org.springframework.stereotype.Componen...

    2024-02-29 15:02:52
  • Cesium|xt3d 点对象动态位置

    Cesium|xt3d 点对象动态位置

    Cesium|xt3d 点对象动态位置效果代码预览地址 效果 代码

    2024-02-29 15:02:46
  • 【Linux】软件包管理器 yum

    【Linux】软件包管理器 yum

    yum的使用

    2024-02-29 15:02:39