新手小白学JAVA 日期类Date SimpleDateFormat Calendar

news2025/6/29 3:34:24
  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的时间
    }
}

  1. 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/4287.html

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

相关文章

【Java实验五】继承与多态

一、实验一 对于父类的含参构造方法,子类必须通过super调用,重写父类的构造方法 设计一个应用程序要求: 设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x和y值的publ…

SpringBoot项目的创建(三):手动创建一个Maven工程,然后引入SpringBoot所需的dependency来完成 (不需联网,但复杂)

SpringBoot项目的创建1.配置Maven环境。2.创建一个新的maven项目3.创建出来的目录结构4 继承springboot父项目5.添加Spring Boot Maven插件6.添加spring和web模块的依赖7.创建入口类8.添加代码测试1.配置Maven环境。 在以maven方式创建Spring Boot项目之前,需要先确…

交换网络基础

交换网络基础网络基础交换机的转发行为数据帧分类交换机MAC地址表ping包来回过程VLAN概念:VLAN接口类型ICMP返回值网络基础 路由器:基于3层路由表转发交换机:基于2层MAC地址表转发,数据帧转发 交换机的转发行为 泛洪&#xff1…

Buffer Pool Size of Total RAM No data

1.问题描述 1)问题现象 通过prometheus监控mysql实例和服务器,使用grafana做可视化展示,grafana 中添加 7362 号dashboard 作为mysql看板,添加 11074 号dashboard 作为主机看板。但是添加后查看 MySQL Overview 看板发现 Buffer Pool Size …

Python制作GUI学生管理系统毕设,大学生总会用得到

有很多可爱的大学生跟我吐槽: 咋这个大学跟我想象的不一样呢? 老师叫我们自己做… 还是那句话,技术才是硬道理 源码、资料电子书文末名片获取 有个经典案例就是 学生管理系统 写完了放在那也是放着,所以今天分享给大家吧&…

2022第四届长安杯复盘

容器加挂密码:2022.4th.changancup! 案件背景: 某地警方接到受害人报案称其在某虚拟币交易网站遭遇诈骗,该网站号称使用”USTD币“购买所谓的"HT币”,受害人充值后不但 “HT币”无法提现、交易,而且手机还被恶意…

PID算法

目录 一、PID算法 二、模拟PID 模拟PID调节器的控制规律为 模拟PID调节器的传递函数为 三、数字PID P控制 PI控制 PD控制 PID控制 数字PID增量型控制算式 PID位置型控制算式 一、PID算法 PID控制是最早发展的自动控制策略之一,是微机化控…

C++ opencv图像存储和MAT容器

1.图像在内存之中的存储方式: 图像矩阵的大小取决于所用的颜色模型,确切说,取决于所用通道数。如果是灰度图像,矩阵就会如图5.1所示。 对于多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相同&#xf…

【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现

文章目录一、天际线启发式二、蚁群算法结合天际线启发式2.1 构建序列2.1.1 思路一2.1.2 思路二2.1.3 思路N三、Java代码实现3.1 项目结构3.2 Ant3.3 ACO3.4 Run3.5 运行结果展示3.5.1 思路一3.5.2 思路二3.5.3 思路N四、小结一、天际线启发式 关于天际线启发式的介绍请看我的另…

推荐算法---矩阵分解

矩阵分解报告 1. 试验介绍 矩阵分解就是把原来的大矩阵,近似的分解成小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵。具体来说就是,假设用户物品的评分矩阵R是m乘n维,即一共有m个用户&…

Redis资料整理

Redis--->是非关系型数据库(也称缓存数据库),是一种NoSQL数据库 存放5种数据类型 String key-value形式 另外list,set,zset,hash 另外两种不常用的:bitmap(位图类型),geo(地理位置类型),另外Redis5.0新增 stream类型 相对来说Redis适合存放少数据量的数据,如果需要存放…

BERT知识蒸馏TinyBERT

1. 概述 诸如BERT等预训练模型的提出显著的提升了自然语言处理任务的效果,但是随着模型的越来越复杂,同样带来了很多的问题,如参数过多,模型过大,推理事件过长,计算资源需求大等。近年来,通过模…

PX4基本配置

目录 下载固件 下载原生稳定版固件 安装PX4 Master, Beta或自定义固件 FMUv2 Bootloader 更新 机架设置 飞行控制器/传感器方向 计算朝向 设置朝向 罗盘校准 执行校准 陀螺仪校准 # 执行校准 加速度计 执行校准 空速计校准 执行校准 水平平面校准 执行校准 …

Spring Cloud Zookeeper 升级为Spring Cloud Kubernetes

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 现有的微服务是使用的Spring Cloud Zookeeper这一套,实际应用在Kubernetes中部署并不需要额外的注册中心,本身Kubernetes自己就支持…

10道不得不会的 Java容器 面试题

博主介绍: 🚀自媒体 JavaPub 独立维护人,全网粉丝15w,csdn博客专家、java领域优质创作者,51ctoTOP10博主,知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于 Java、Go 技术领域和副业。🚀 最…

FFmpeg内存IO模式

ffmpeg 支持从网络流 或者本地文件读取数据,然后拿去丢给解码器解码,但是有一种特殊情况,就是数据不是从网络来的,也不在本地文件里面,而是在某块内存里面的。 这时候 av_read_frame() 函数怎样才能从内存把 AVPacket…

TensorFlow的GPU使用相关设置整理

前言 TensorFlow是一个在机器学习和深度学习领域被广泛使用的开源软件库,用于各种感知和语言理解任务的机器学习。 默认情况下,TensorFlow 会映射进程可见的所有 GPU(取决于 CUDA_VISIBLE_DEVICES)的几乎全部内存。这是为了减少内…

国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策

国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考…

【Linux】Linux背景、环境的搭建以及用XShell实现远程登陆

目录Linux 背景Linux环境搭建Linux远程登陆Linux 背景 肯尼斯蓝汤普森最早用汇编语言创建了UNIX系统,后来与他的好“基友”丹尼斯里奇(C语言之父),他们两个一同用C语言重新写了UNIX系统,但是操作系统的使用是需要收费…

ActiveState Platform - November 2022

ActiveState Platform - November 2022 ActiveState平台定期更新新的、修补的和版本化的软件包和语言。 Python 3.10.7、3.9.14、3.8.14-解决了许多安全问题的点发布。 Python C库-ibxml 2.10.3、libxslt 1.1.37、libexpat 2.4.9、zlib 1.2.13、curl 7.85.0和sqlite3 3.39.4&am…