Java常用类---日期时间类

日期时间类

Date类

简介

在Java中,Date类用来封装当前的日期和时间。Date类提供两个构造函数来初始化对象,如下所示。

  1. 通过Date() 使用当前日期和时间来初始化对象。

  2. 通过Date(long millisec) 来初始化对象,其中的参数是从1970年1月1日起的毫秒数。

补充:Date对象内部参数,如下图所示。

注:Date(99, 10, 8)指的是1900+99年10+1月8日!!!

Date类中的部分方法

  1. boolean after(Date date) 调用此方法的Date对象在指定日期之后返回true,否则返回false,代码如下式所示。

        public static void main(String[] args) {
            Date date = new Date();
            //date1为指定时间2024.1.10
            Date date1 = new Date(124, 0,10);
            System.out.println(date.after(date1));
        }

    运行结果如下图所示。

    注:指定日期也是一个Date类的一个实例对象。

  2. boolean before(Date date) 调用此方法的Date对象在指定日期之前返回true,否则返回false,如下式所示。

    public static void main(String[] args) {
            Date date = new Date();
            //date1为指定时间2024.1.10
            Date date1 = new Date(124, 0,10);
            System.out.println(date.before(date1));
        }

    运行结果如下图所示。

  3. int compareTo(Date date) 比较调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数-1。调用对象在指定日期之后则返回正数1,如下式所示。

    public static void main(String[] args) {
            Date date = new Date();
            //date1为指定时间2024.1.10
            Date date1 = new Date(124, 0,10);
            //在Date()类中已经重写了clone方法。
            Date dateCopy = (Date) date.clone();
            System.out.println(date.toString());
            System.out.println(date1.toString());
            int i = date.compareTo(date1);
            int j = date.compareTo(dateCopy);
            switch (i){
                case 0:
                    System.out.println("两日期相等");
                    break;
                case -1:
                    System.out.println("调用对象在指定日期之前");
                    break;
                case 1:
                    System.out.println("调用对象在指定日期之后");
                    break;
            }

    运行结果如下图所示。

    注:int compareTo(Object obj) 方法类似于int compareTo(Date date) 方法,区别仅是传入参数类型不同,若传入obj为Date类型的实例对象,则两种方法完全等同,否则会抛出ClassCastException异常。

  4. boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false,如下式所示。

        public static void main(String[] args) {
            Date date = new Date();
            Date dateCopy = (Date) date.clone();
            System.out.println(date.equals(dateCopy));
        }

    运行结果,如下图所示。

  5. long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数,如下式所示。当然,long getTime() 方法也可以用来进行日期比较。

        public static void main(String[] args) {
            Date date = new Date(70,0,2);
            System.out.println(date.toString());
            long time = date.getTime();
            System.out.println(time);
        }

    运行结果,如下图所示。

    注:显示的毫秒数为57600000 = 16 * 60* 60 *1000,不是24 * 60 * 60 * 1000。原因为中国地处东八区,需要加上中国的时区 8 。

    补充:GMT指格林尼治时间,以本初子午线为基础。UTC指世界协调时间,以原子钟时长为基础,更准确。CST为时区概念的缩写,eg:China Standard Time 中国标准时区(UTC + 8)。

  6. void setTime(long time) 自1970年1月1日00:00:00 GMT以后,使用time毫秒数来设置时间和日期,如下式所示。

        public static void main(String[] args) {
            Date date = new Date();
            date.setTime(57660000);
            System.out.println(date.toString());
        }

    运行效果,如下图所示。

  7. String toString( ) 把此 Date 对象转换为String形式的字符串,内容包括星期、月份、日期、具体时间(时、分、秒)、所采用的时间概念、年份。如下式所示。

        public static void main(String[] args) {
            Date date = new Date(124, 0, 12);
            System.out.println(date.toString());
        }

    运行结果,如下图所示。

SimpleDateFormat

定义和使用

SimpleDateFormat类用来格式化和分析日期,允许用户可以自定义日期时间格式。

如下式所示。

    public static void main(String[] args) {
        //实例化一个Date类对象
        Date date = new Date();
        /*实例化一个SimpleDateFormat类对象
         *在传入参数中,可以设定自定义时间格式
         * 即时间模式字符串("yyyy-MM-dd HH:mm:ss")用于指定时间格式
        */
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //使用format(Data)方法来输出自定义时间
        System.out.println("当前时间为:"+ft.format(date));
    }

运行结果,如下图所示。

注:格式的大小写代表截然不同的意思,eg:MM为月份,mm为分;HH为24小时制,hh为12小时制。

在使用SimpleDateFormat类时,通过时间模式字符串用来指定时间格式,在此模中,所有的ASCII字母都被保留为模式字母,具体字母定义,如下表所示。

字母描述举例描述
G纪元标记AD
yyyy四位年份2024
MM两位月份January or 01
dd两位日期12
hhAM/PM(1~12)(12小时制)12
HH24小时制(0~23)23
mm分钟数35
ss秒数55
SS毫秒数265
E星期Friday
D一年中的第几天12
F一个月中第几周的某天第几次出现2(second Friday.in January )
w一年中的第几周36
W一个月中第几周1
aAM/PM标记上午/下午
k一天中的第几个小时(1~24)17
KAM/PM格式下,一天中的第几个小时(0~11)5
z时区CST
''单引号''

注:字母不同的重复数代表不同的位数,eg:d指3,dd指03,ddd指003。

使用printf方法来格式化日期

printf方法可以很轻松的格式化时间和日期,具体使用方法:规格为两个字母的格式,以%t开头,并以一个字母作为结尾。eg:%tF、%tc、%tD等。

注:不同的字母结尾,有不同的转化效果,如下表所示。

格式解释
%tB月份全名
%tb月份缩写
%tA星期全名
%ta星期缩写
%tY四位数年份
%ty两位数年份
%tm两位数月份
%td两位数日期
%te一位或两位的日期
%tH24小时制的小时数
%tl12小时制的小时数
%tM分钟数
%tS秒数
%tp上午或下午
%tZ时区
%tF年-月-日格式
%tc全部日期和时间信息
%tD月/日/年格式
%tr时:分:秒(12时制)
%tT时:分:秒(24时制)
%tR时:分(24时制)

运行效果,如下图所示。

Calendar类

Calendar类的创建

Calendar类实现了设置和获取日期数据的特定部分,且能对日期进行加减运算。

Calendar类是一个抽象类,只需要使用getInstance方法创建即可。如下式所示。

    public static void main(String[] args) {
        //默认为当前日期
        //调用getInstance方法创建
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
    }

Calendar类中的部分方法

set方法

使用set方法来创建指定日期的Calendar对象:首先创建一个Calendar对象,后再设定该对象中的年月日参数,如下式所示。

    public static void main(String[] args) {
        //默认为当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.set(2024,0,12);
        System.out.printf("%tF",calendar);
    }
使用set方法还可以用来设置某个字段,如下式所示。

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //设置字段YEAR
        calendar.set(Calendar.YEAR,2023);
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);
    }

注:其他字段的更改以此类推。

常量和get方法

Calendar类中的常量,不同常量代表不同意义,如下表所示。

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

可以通过常量和get方法来获得年份、月份等日期数据的特定部分,如下式所示。

public static void main(String[] args) {
        //默认为当前日期
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);//获得年份
        int month = calendar.get(Calendar.MONTH);//获得月份
        int date = calendar.get(Calendar.DATE);//获得日
        int hour = calendar.get(Calendar.HOUR_OF_DAY);//获得小时(24进制)
        int minute = calendar.get(Calendar.MINUTE);//获得分钟
        int second = calendar.get(Calendar.SECOND);//获得秒
        //星期获取返回值为1代表星期日、2代表星期1,以此类推
        int day = calendar.get(Calendar.DAY_OF_WEEK);//获得星期

注:星期获取返回值为1代表星期日、2代表星期1,以此类推!!!

add方法

Calendar类中的add方法,通过add方法可以实现加上减去某个数,如下式所示。

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Calendar calendar1 = Calendar.getInstance();
        System.out.printf("当前日期为:"+"%tF%n",calendar);
        //把calendar对象的日期加上10,更改后表示为10天后的日期
        calendar.add(Calendar.DATE, 10);
        System.out.println("更改后的日期为:"+calendar.get(Calendar.DATE)+"号");
        //把calendar1对象的日期减去10,更改后表示为10天前的日期
        calendar1.add(Calendar.DATE, -10);
        System.out.println("更改后的日期为:"+calendar1.get(Calendar.DATE)+"号");
    }

运行效果,如下图所示。

注:加减日期数,其它所有的数值会被重新计算!!!

GregorianCalendar类

GregorianCalendar类即阳历(公历)类,继承了Calendar类,为Calendar类的一个子类,具有父类的方法。

创建方法如下:

GregorianCalendar gcalendar = new GregorianCalendar();

使用GregorianCalendar类输出当前日期,代码如下所示。

 public static void main(String[] args) {
        // 初始化 Gregorian 日历
        // 使用当前时间和日期
        // 默认为本地时间和时区
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        String months[] = {
                "Jan", "Feb", "Mar", "Apr",
                "May", "Jun", "Jul", "Aug",
                "Sep", "Oct", "Nov", "Dec"};
​
            // 显示当前时间和日期的信息
            System.out.print("日期: ");
            System.out.print(gregorianCalendar.get(Calendar.YEAR) + "年");
            System.out.print(months[gregorianCalendar.get(Calendar.MONTH)] + "月");
            System.out.println(gregorianCalendar.get(Calendar.DATE) + "日");
            System.out.print("时间: ");
            System.out.print(gregorianCalendar.get(Calendar.HOUR) + ":");
            System.out.print(gregorianCalendar.get(Calendar.MINUTE) + ":");
            System.out.println(gregorianCalendar.get(Calendar.SECOND));
            // 测试当前年份是否为闰年
            int year = gregorianCalendar.get(Calendar.YEAR);
            if(gregorianCalendar.isLeapYear(year)) {
                System.out.println("当前年份是闰年");
            }
            else {
                System.out.println("当前年份不是闰年");
            }
        }

运行结果,如下图所示。

注:Calendar的月份是从0开始的,而日期和年份是从1开始的!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/314298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RS触发器

转自:【基础】RS触发器_两个或非门构成rs触发器-CSDN博客 RS触发器为什么能 “保持上一状态” 触发器就是在常规的门电路的基础上加入了反馈,这样触发器就实现了存储数据的功能。这也是上面章节 “RS触发器实验” 的 RS触发器特征表 中第3条 “保持上一…

Redis的优化

1 Redis的高可用 1.1 高可用的定义 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些&…

mat数据格式转png

目的 将多个.mat数据格式转化成多个文件夹下的png图片格式 即 一个PAT.mat文件,生成一个PAT文件夹下的图片 方法 1 单文件处理 import scipy.io as scio from PIL import Image import numpy as npdef MatrixToImage(data):data data*255new_im Image.fromarray…

windos exe 以服务的形式运行(开机运行)

windos 品台编写的 小工具 exe 或者 批处理 .bat 经常需要开机自启动,可以直接把它 加在开启启动项,或者做成 windos服务,这样既可以开机自动启动而且还可以 防止误触关闭掉; windos 以服务启动 exe/bat 的通用方式&#xff1…

Word不同部分(分节)设置页眉和页码的使用指南——附案例操作

Word页眉和页码分节设置的使用指南 目录 Word页眉和页码分节设置的使用指南摘要1. 插入分节符2. 设置不同的页眉3. 设置不同的页码4. 调整页码的起始值5. 删除或更改分节6. 预览和调整 摘要 在撰写word文档时,我们经常需要在不同的部分应用不同的页眉和页码格式。在…

androj studio安装及运行源码

抖音教学视频 目录 1、 jdk安装 2、下载安装androj studio 3 、打开源码安装运行相关组件 4、 安装模拟器 1、 jdk安装 安卓项目也是java开发的,运行在虚拟机上,安装jdk及运行的时候,就会自动生成虚拟机, jdk前面已经讲过&…

宏景eHR 多处 SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR view、trainplan_tree.jsp等接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃…

C++力扣题目106,105--中序和后序,前序和中序遍历构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…

从无到有制作docker镜像、容器详细步骤

1、编写一个Dockerfile文件,内容如下 # 基础镜像jdk,jdk里包含里操作系统 FROM openjdk:8u282-jdk# 工作目录,也就是容器里目录 WORKDIR /home/prq/# 添加ppp目录下的文件到容器/home/prq/里 ADD ./ppp /home/prq/# 暴露端口8080 EXPOSE 8080# 启动脚本…

红黑树之概述

红黑树 R-B Tree,全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性 (1)每个节点或者是黑色&…

从DETR到Mask2Former(1):DETR-segmentation结构全解析

网上关于DETR做的detection的解析很多,但是DETR做Segmentation的几乎没有,本文结合DETR的论文与代码,对DETR做一个详细的拆解。理解DETR是理解Mask2Former的基础。 首先得把DETR-segmentation给run起来。Github上DETR的repository&#xff0…

日常工作中,软件测试人员如何避免“背锅”

作为一名软件测试工程师,日常工作中最常打交道的肯定就是开发和产品经理。有沟通就会问题,有问题难免会有争执。那么你肯定听过这些话: “这么弱智的bug你都测不出来吗?” “为啥这个功能还没测完就上线了?” “研发…

AI生成APP工具推荐:5款让你惊艳的AI应用

在这个数字化、智能化的时代,人工智能(AI)已经深入到我们生活的方方面面。其中,AI生成APP工具更是以其强大的创意和生成能力,成为自媒体人和设计师们的得力助手。本文将为你介绍五款实用的AI生成APP工具,它们将为你的创意打开无限…

Pycharm close project 速度缓慢解决办法

解决Pycharm close project缓慢现象 1.问题描述 close project后需要等待很长的时间。 2.解决办法 在Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion 问题解决!!! 😃😃&#x…

opencv拉流出现missing picture in access unit with size 4错误解决

0、应用场景问题 我们使用opencv作为拉流客户端,获取画面后进行图像处理并推流(使用ffmpeg库)。 opencv解码同样使用ffmpeg库。 我们要求opencv能根据业务不断进行拉流操作,等效的逻辑代码如下: while(1) {printf(&…

YOLOv6s,map值打印成两位小数(原本是显示0.538,变成显示为53.79)

显示结果 更改前: 更改后: 方法 将tools/eval.py中的--do_pr_metric后面改为defaultTrue即可打印出map值原本是显示0.538,变成显示为53.79,方法为👇 在YOLOv6-main/yolov6/core/evaler.py中做如下更改&#xff1a…

揭秘H5与小程序的测试奥秘!

最近接触了较多关于H5页面的测试,H5页面的测试除了业务逻辑功能测试外,其他部分的测试方法基本是可以通用的,在此对H5页面和小程序的一些通用测试方法进行总结分享给大家。 H5优势 H5可以跨平台,开发成本相对较低; H…

代码随想录算法训练营第25天 | 216.组合总和III 17.电话号码的字母组合

目录 216.组合总和III 💡解题思路 回溯三部曲 💻实现代码 17.电话号码的字母组合 💡解题思路 # 数字和字母如何映射 # 回溯法来解决n个for循环的问题 💻实现代码 216.组合总和III 题目链接:216.组合总和III …

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切,对长亭晚,骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名,可以将比较长的命令进行简化。 默认情况下会输出当前的设置: $ alias lls -lah lals -lAh llls -lh lsls --…

【Docker】Linux中Docker数据管理的数据卷及挂载

目录 一、数据管理 1. 讲述 2. 应用场景 二、数据卷的应用 1. 命令 2. tomcat镜像 3. 挂载数据卷 4. 项目部署在数据卷 三、目录挂载 四、完善Tomcat配置 每篇一获 一、数据管理 1. 讲述 Docker 的数据管理主要涉及到两个方面:数据卷(Volume…