JAVA 日期类Date SimpleDateFormat Calendar

news2024/11/8 19:44:49

1、Date日期类

类 Date 表示一个特定的瞬间,精确到毫秒
1.1 Date的构造函数
Date() 分配一个 Date 对象,以表示分配它的时间(精确到毫秒)
Date(long date) 分配一个 Date 对象,表示自从标准基准时间起指定时间的毫秒数
标准基准时间:称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00

1.2 Date的构造函数练习

创建包:cn.cxy.date
创建类:TestDate1

package cn.cxy.date;

import java.util.Date;

/*本类用于Date的入门*/
public class TestDate1 {
    public static void main(String[] args) {
        //1.利用无参构造创建Date类对象,注意导包:import java.util.Date;
        Date d1= new Date();
        System.out.println(d1);//Thu Sep 23 23:14:59 CST 2021

        //2.利用含参构造创建Date对象
        long t = 1000*60*60;//1000ms*60*60->1min*60->1h
        Date d2 = new Date(t);//从标准基础时间1970-1-1-00:00开始往后数1h
        System.out.println(d2);//Thu Jan 01 09:00:00 CST 1970
        //CST是中国时区,所以额外加了8h变成了09:00:00
    }
}

常用时间缩写

GMT 格林尼治时间 = UTC 协调世界时间
UTC + 时区差 = 本地时间,我们是在东八区,东加西减,所以
CST 中国标准时间:China Standard Time UT+8:00

1.3 Date的常用方法练习

getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒值
setTime(long time) 设置时间,表示 1970 年 1 月 1 日 00:00:00 GMT 后的毫秒值

创建包:cn.cxy.date
创建类:TestDate2

package cn.cxy.date;

import java.util.Date;

/*本类用于Date的常用方法测试*/
public class TestDate2 {
    public static void main(String[] args) {
        //1.创建Date对象
        Date d1 = new Date();
        //2.获取从标准基准时间到现在时间的毫秒值,是一个时间差
        System.out.println(d1.getTime());//1632404114206
        //*1.0是为了变成浮点型,/1000变成秒,/60变成分,/60变成小时,/24变成天,/365变成年
        System.out.println(d1.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365);//约等于51,从1970到2021

        //3.打印d1就是当前的时间
        System.out.println(d1);//Thu Sep 23 21:39:29 CST 2021
        //4设置一个long值,作为毫秒为单位的时间差
        long t = 1000*60*60;
        d1.setTime(t);
        System.out.println(d1);//打印的就是从标准基准时间经过时间差t的时间
    }
}

2、SimpleDateFormat

SimpleDateFormat 常用于格式化和解析日期
日期和时间格式由日期和时间模式字符串指定,字母与日期时间的对应关系如下

在这里插入图片描述

2.1 常用构造函数

SimpleDateFormat() 用默认模式的日期格式构造 SimpleDateFormat
SimpleDateFormat(String pattern) 用给定模式的日期格式构造 SimpleDateFormat

2.2 日期转换格式工具类练习

创建包:cn.cxy.date
创建类:TestSDF.java

package cn.cxy.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*本类用于测试SimpleDateFormat类*/
public class TestSDF {
    public static void main(String[] args) throws ParseException {
        /*01 格式化:从 Date 到 String*/
        //1.创建日期类对象,包含当前的时间
        Date d = new Date();
        //2.创建日期转换工具类的对象,此时使用的是无参构造
        //SimpleDateFormat sdf = new SimpleDateFormat();
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        //3.通过刚刚创建好的工具类对象转换日期的格式
        String s = sdf2.format(d);
        //4.打印转换好的时间字符串:
        //默认时间格式:21-9-23 下午11:18
        //自定义时间格式:2021/09/23 10:21:39
        System.out.println(s);
        
        /*解析:从String到 Date*/
        //1.定义一个时间字符串
        String s2 = "2021/9/23 22:24:03";
        //报错:ParseException解析异常: Unparseable date不可分割日期: "2021/9/23 22:24:03"
        //SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        //2.利用含参构造创建工具类对象,指定格式,注意必须是规定格式,否则会抛出异常
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        //3.利用工具类对象对日期进行转换
        Date d2= sdf3.parse(s2);
        //4.打印转换好的日期
        System.out.println(d2);//Thu Sep 23 22:24:03 CST 2021

    }
}

2.3 日期转换综合练习

创建包:cn.cxy.date2
创建工具类:DateUtils.java

package cn.cxy.date2;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*本类用作日期类的工具类,一般工具类的要求:
* 构造方法私有化 & 成员方法静态化*/
public class DateUtils {
    //1.创建一个私有化的构造方法
    private DateUtils(){}

    //2.创建一个将日期转换为字符串的方法
    //参数:日期对象Date  日期转换的格式:format 返回值类型:String
    public static String dateToString(Date date, String format){
        //1.通过传入的日期格式,创建指定的工具类对象
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        //2.通过工具类对象将字符串转换为对应的日期字符串,并拿到转换后的字符串结果
        String s = sdf.format(date);/*转换*/
        //3.将最终转换的字符串结果返回
        return s;
    }

    //3.创建一个将字符串转换为日期的方法
    //参数:字符串对象String  日期转换的格式:format 返回值类型:Date
    public static Date stringToDate(String s, String format) throws ParseException {
        //1.通过传入的日期格式,创建指定的工具类对象
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        //2.通过工具类对象将日期对象转换为对应的字符串,并拿到转换后的日期对象
        Date d = sdf.parse(s);/*解析*/
        //3.将最终转换的日期对象作为方法的结果返回
        return d;
    }
}

创建包:cn.cxy.date2
创建测试类:TestDate.java

package cn.cxy.date2;

import java.text.ParseException;
import java.util.Date;

/*本类用于自定义日期工具类的测试类*/
public class TestDate {
    public static void main(String[] args) throws ParseException {
        //1.创建日期类对象
        Date d = new Date();
        //2.调用自定义日期工具类的功能:将日期对象转换成字符串
        String s = DateUtils.dateToString(d, "yyyy年MM月dd日 HH:mm:ss");
        String s2 = DateUtils.dateToString(d, "yyyy年MM月dd日");
        String s3 = DateUtils.dateToString(d, "HH:mm:ss");
        System.out.println(s);//2021年09月23日 10:55:32
        System.out.println(s2);//2021年09月23日
        System.out.println(s3);//10:58:21

        //3.调用自定义工具类的功能,将字符串转换为对应的日期对象
        //注意,此处的format格式必须与s字符串定义时的格式一致!!!否则转换会报错!
        Date d2 = DateUtils.stringToDate(s, "yyyy年MM月dd日 HH:mm:ss");
        System.out.println(d2);//Thu Sep 23 23:01:21 CST 2021
    }
}

3.Calendar日历类

3.1 概念

Calendar 类是一个抽象类,不可直接实例化,但是它有一个直接已知子类GregorianCalendar
它为特定瞬间与还有比如年月日等日历字段之间的转换和操作提供了一些方法

3.2 常用方法

Calendar提供了一个方法getInstance()用于获取Calendar对象,它的日历字段就是当前的日期

int get(int field) 返回给定日历字段的值
abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

3.3 入门案例

创建包:cn.cxy.date3
创建类:TestCalendar.java

package cn.cxy.date3;

import org.junit.Test;
import java.util.Calendar;

/*本类用于练习日历类*/
public class TestCalendar {
    @Test
    public void TestGet(){
        //1.获取日历对象
        Calendar c = Calendar.getInstance();
        System.out.println(c);//能获取很多信息,比如MONTH=8,我们现在是9月,说明月份是从0开始的
        //2.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");//2021年9月24日
    }
    @Test
    public void TestAdd1(){
        //1.获取日历对象
        Calendar c = Calendar.getInstance();
        //2.给指定的日历字段进行指定数目的加减操作,得到10年后的今天
        c.add(Calendar.YEAR,+10);

        //3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        //4.打印的就是10年后的今天:2031年9月24日
        System.out.println(year + "年" + month + "月" + day + "日");
    }

    @Test
    public void TestAdd2(){//需求:打印1年后的7天后
        //1.获取日历对象
        Calendar c = Calendar.getInstance();
        //2.给指定的日历字段进行指定数目的加减操作,得到10年后的今天
        c.add(Calendar.YEAR,+1);
        c.add(Calendar.DAY_OF_MONTH,+7);

        //3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        //4.打印1年后的7天后:2022年10月1日
        System.out.println(year + "年" + month + "月" + day + "日");
    }

    @Test
    public void TestSet(){
        //1.获取日历对象
        Calendar c = Calendar.getInstance();
        //2.测试set方法
        c.set(2099,9,1);
        //3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        //4.打印:2099年10月1日
        System.out.println(year + "年" + month + "月" + day + "日");
    }
}

3.4 巩固案例

创建包:cn.cxy.date3
创建类:TestCalendar.java
需求:用户任意输入一个年份,输出这年的2月有多少天

package cn.cxy.date3;

import java.util.Calendar;
import java.util.Scanner;

/*本类用于日历类的巩固练习
 * 需求:获取任意一年的2月有多少天*/
public class TestFeb {
    public static void main(String[] args) {
        //1.提示并接收用户要测试的年份:
        System.out.println("请您输入要查询的年份:");
        int year = new Scanner(System.in).nextInt();
        //2.获取日历类对象,并将时间设置为用户输入那年的3月1日
        Calendar c = Calendar.getInstance();
        c.set(year, 2, 1);
        //3.三月一日往前推一天就是2月的最后一天
        c.add(Calendar.DATE, -1);
        //4.获取这一天输出即可
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年的2月有" + date + "天");
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问:程序已经支持G…

论洗碗哥在CSDN摸滚打爬的256个日夜

目录 机缘 收获 成就 憧憬 机缘 创作初心了为了记录一下自己的日常学习过程,方便自己日后去总结,或者遇到类似的问题的时候就可以翻阅自己的文章了。也可以加深自己的印象。其实一开始我是一个不太善于总结的人,机缘之下,听到…

机器学习之PCA算法

目录 PCA算法 PCA目标 PCA原理推导 基于最大可分性推导 基于最近重构误差推导 PCA算法流程 PCA优点 PCA缺点 基于PCA的人脸识别 PCA算法 PCA,即主成分分析(Principal Component Analysis),是一种常用的降维技术&#x…

【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

警惕Prometheus 中的重复样本和无序时间戳错误 1、场景 您的 Prometheus 服务器日志中是否遇到过以下错误? "Error on ingesting out-of-order samples" "Error on ingesting samples with different value but same timestamp" "dupli…

2023最全 Java 高频面试合集,掌握这些你也能进大厂

进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,对于 Java 后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很…

内网隧道代理技术(六)之 PowerCat反弹Shell

PowerCat反弹Shell PowerCat介绍 PowerCat是一个powershell写的tcp/ip瑞士军刀,看一看成ncat的powershell的实现,然后里面也加入了众多好用的功能,如文件上传,smb协议支持,中继模式,生成payload&#xff…

几分钟带你快速了解SpringBoot框架理论知识!

1.什么是SpringBoot SpringBoot其实就是Spring的子项目。它简化了Spring的开发难度,舍弃了一切可以舍弃的xml配置文件,提供了各种启动器,让程序员上手更快,节省了开发时间。 2.SpringBoot的优点 SpringBoot其实就是对Spring的缺…

抖音林客系统定制开发

抖音林客是一款提供旅游攻略和景点推荐的短视频社交平台,主要用户群体为喜欢旅游和分享生活的年轻人。从需求分析角度来看,可以从以下几个方面进行分析: 信息获取需求:抖音林客用户需求获取有关旅游的详细和实用的信息&#x…

Idea快捷键设置(Idea快捷键大全)

目录 友情提醒第一章、IDEA常用快捷键1.1)快捷键:查找/提示类1.2)快捷键:修改代码类1.3)快捷键:光标移动类 第二章、如何修改快捷键2.1)修改快捷键的方法2.2)我修改的快捷键&#xf…

不容错过!科东软件在2023华南国际工博会等你,一起见证科技的力量!

诚挚邀请 2023年6月27-29日,SCIIF华南国际工业博览会即将在深圳国际会展中心(宝安新馆)召开。本届华南工博会汇集大批国内外头部大咖,将呈现一系列世界领先的技术和创新理念,为新型工业发展注入新动力。 科东软件作为…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式(AAA模式)十、Telne…

2023年低代码平台全球排行榜:企业首选榜单,揭晓最受欢迎的工具

近年来,随着数字化转型和云计算技术的普及,低代码平台已经成为企业开发和应用程序的首选工具之一。低代码平台可以大大缩短开发时间和成本,提高灵活性和可扩展性,同时保证应用程序的质量和稳定性。在这个强制数字化的时代&#xf…

关于npm和package.json的一些经验之谈(如何同时使用多个版本的echarts)

前言 人们往往会忽视他们最常用的东西的一些构造原理,感觉就是天生自带没有为什么。但是真的被问到这些问题的时候,却又答不上来。对于前端开发工程师来说,npm和package.json就是这样的东西。很熟悉却又很陌生。熟悉,是因为&…

【消费战略方法论】食品品牌成功的本质

消费始于消费者 也终于消费者 当下的品牌是否都是以“消费者”为核心进行打造和运营的?面对着越来越多、五花八门的战略思路、品牌方法、营销理论,很多品牌越来越偏离了“消费”的本质。沉迷于精湛的营销打法之前是否需要先审视一下做品牌的初衷。 现…

Nginx服务性能和安全优化

目录 一、配置Nginx隐藏版本相关信息 1.隐藏版本号 2.修改版本号及相关信息 ​编辑​编辑 二、修改Nginx运行时的属主和属组 三、配置Nginx网页缓存时间 四、配置Nginx站点日志分割 五、设置Nginx长连接及超时时间 六、配置Nginx网页压缩 七、配置Nginx防盗链 1.模拟…

人工智能-A*启发式搜索算法解决八数码问题 Python实现

一.问题描述 八数码问题也称为九宫问题。在 33 的棋盘,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字 0 来表示),与空 格相邻的棋子可以移到空格中…

操作系统——Linux 进程间通信

一:实验题目 Linux 进程间通信 二:实验目的 Linux 系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据,通过本实验,理解 熟悉 Linux 支持的消息通信机制。 三:实验内容(…

企业级微服务架构实战项目--xx优选-小程序安装篇4

一 搭建微信小程序前端环境 1.1 申请小程序测试号 申请地址:微信公众平台 使用微信扫描二维码进行申请,申请成功之后,进入界面,获取小程序ID和秘钥 。 AppID(小程序ID) wx62bfe844fea3eba8 AppSecret(小程序密钥) …

JavaScript ES9新特性

文章目录 Object spread syntax(对象扩展语法)Promise.prototype.finally()Asynchronous Iteration(异步迭代):Rest/Spread Properties(剩余和扩展属性):RegExp named capture group…

Apikit 自学日记:导入、导出文档

一、导入API文档 功能入口:API管理应用 / 选中某个项目 / API文档菜单 / 点击“ API”按钮旁的下拉按钮 / 选中“导入API” Eolink提供一键导入已有API文档的功能,支持多种产品格式。常用于新项目创建后,需要对旧项目或旧软件内数据进行迁移…