java---日期类汇总

2023-11-10

java中常用的日期类有Date,SimpleDateFormat,Calendar这三种,现在分别对三个类的日常使用进行大概的总结:

1.Date类

1.1 基本介绍

一般常用的事Java.util.Date包下的Date类,在java.sql.Date包下也有一个Date类,sql包下的Date类主要用于和数据库打交道,其内容只包括日期,没有时间,util包下的Date类用于平常日期使用,其内容包括日期和时间。Date类表示系统特定的时间戳,可以精确到毫秒。Date类中的大部分方法都过时了,或者被Calendar类中的方法所取代。

1.2 构造方法

Date类有两个构造方法,Date对象表示时间的默认顺序是 星期,月,日,小时,分,秒,年

  • 无参构造方法Date():此种形式表示分配一个Date对象,并初始化,以便他代表被分配的时间,精确到毫秒,使用该构造方法创建的对象可以获取本地的当前时间。
  • 带参数的构造方法Date(long date):此种形式表示分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数(也就是从GMT(格林尼治时间)时间1970年1月1日0时0分0秒开始经过参数date指定的毫秒数

源码:

private transient long fastTime;

public Date() {
    this(System.currentTimeMillis());
}

public Date(long date) {
        fastTime = date;
}

import java.util.Date;

Date date = new Date();
System.out.println(date);
//输出结果:
Fri Aug 11 14:32:19 CST 2023

long date=3*24*60*60*1000;//1秒=1000毫秒,该时间为一天24小时
Date d2=new Date(date);
System.out.println(d2);//输出从GMT基准时间过了3天后的时间
//输出:Sun Jan 04 08:00:00 CST 1970(中央标准时间)

 1.3常用方法

  • boolean after(Date date):判断调用此方法的Date对象是否在指定日期之后
  • boolean before(Date date):判断调用此方法的Date对象是否在指定日期之前
  • int compareTo(Date date):比较调用此方法的Date对象与指定的日期,两者相等时返回0,调用对象在指定对象日期之前返回负数,反之返回正数
  • boolean equals(Object date):当调用此方法的Date对象与指定日期相等时,返回true,否则返回false
  • long getTime():返回自1970年1月1日0时0分0秒以来,此Date对象表示的毫秒数
  • String toString():获取当前日期和时间并用一下形式的输出:“ dow mon dd hh:mm:ss zzz yyy”,dow:一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
//public Date():分配一个Date对象,并初始化,以便他代表他被分配的时间,精确到毫秒
Date d1=new Date();
System.out.println(d1);
 
//public Date(long date):分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
long date=24*60*60*1000;
Date d2=new Date(date);
System.out.println(d2);

System.out.println(d2.after(d1));//输出:false
System.out.println(d2.before(d1));//输出:true
System.out.println(d2.compareTo(d1));//输出:-1
System.out.println(d2.equals(d1));//输出:false
System.out.println(d2.getTime());//输出:86400000=24*60*60*1000
System.out.println(d2.toString());//输出:Fri Jan 02 08:00:00 CST 1970

2.SimpleDateFormat类

因为使用Date类与字符串时间相互转化十分困难,因此考虑使用Date类的其他子类。

DateFormat是日期/时间格式化子类的抽象类,他与以语言无关的方式格式化与解析日期活时间,是抽象类,所以使用其子类SimpleDateFormat实现日期与字符串的相互转换。

2.1 常用的模式字母以及对应关系

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到'Z'以及'a'-'z'引导的字母被解释为表示日期或者时间字符串的组件的模式字母,对应关系:

y
M
d
H
m
s

2.2 构造方法

  • 无参构造方法

public SimpleDateFormate():使用默认模式和日期格式

  • 有参构造方法

public SimpleDateFormate(String pattern):使用给定的模式和默认的日期格式

//源代码

//无参构造
public SimpleDateFormat() {
        this("", Locale.getDefault(Locale.Category.FORMAT));
        applyPatternImpl(LocaleProviderAdapter.getResourceBundleBased().getLocaleResources(locale)
                         .getDateTimePattern(SHORT, SHORT, calendar));
    }


//Params:
//pattern – the pattern describing the date and time format
//Throws:NullPointerException – if the given pattern is null
//IllegalArgumentException – if the given pattern is invalid
//See Also:
//Locale.getDefault(Locale.Category), Locale.Category.FORMAT
//有参构造
public SimpleDateFormat(String pattern)
    {
        this(pattern, Locale.getDefault(Locale.Category.FORMAT));
    }

    private void applyPatternImpl(String pattern) {
        compiledPattern = compile(pattern);
        this.pattern = pattern;
    }

2.3 成员方法:

  • 格式化(从Date转换为String)

方法:public final String format(Date date):将日期格式化为日期/时间字符串,示例代码如下:

Date d=new Date();
//无参构造
SimpleDateFormat sdf=new SimpleDateFormat();
String s=sdf.format(d);
System.out.println(s);
//输出:2022/10/15 下午3:04

//有参构造
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s2=sdf.format(d);
System.out.println(s2);
//输出:2022年10月15日 15:19:11
  • 解析(从String转化为Date)

方法:public Date parse(String source):从给定的字符串,解析文本以生成Date对象

String ss="2022-10-15 15:15:36";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd=new Date();
dd=sdf.parse(ss);
System.out.println(dd);
//输出:Sat Oct 15 15:15:36 CST 2022

3.Calendar类

java开发Calendar类的目的是为了替换Date类,还是该类的设计依然相当失败,只有几个方法值得试用一下啊。

Calendar类是java.util包中提供的一个抽象类,该类从JDK1.1开始出现,作为Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理,Calendar类常见的子类为:java.util.GregorianCanlendar,获取Calendar对象一般使用类中的静态方法:getInstance(),该方法返回了Calendar的子类对象

3.1静态变量

Calendar.YEAR //表示年份
 
Calendar.MONTH //表示月份
 
Calendar.DATE //表示当前时间为多少号(日历式的多少号)
 
Calendar.HOUR //表示小时(12小时制)
 
Calendar.HOUR_OF_DAY //表示小时(24小时制)
 
Calendar.MINUTE //表示分钟数
 
Calendar.SECOND //表示秒数
 
Calendar.MILLENSECOND //表示毫秒数
 
Calendar.WEEK_OF_MONTH //当前时间是所在当前月的第几个星期(日历式的第几周)
 
Calendar.WEEK_OF_YEAR //当前时间是所在当前年的第几个星期
 
Calendar.DAY_OF_WEEK_IN_MONTH //当前时间是所在当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
 
Calendar.DAY_OF_WEEK //一周七天中,当前时间是一周中的第几天
 
Calendar.DAY_OF_YEAR //表示一年中的第几天
 
Calendar.DAY_OF_MONTH //表示一个月中的第几天,结果等同于Calendar.DATE
 
Calendar.AM_PM //表示是上午还是下午
 
Calendar.SUNDAY //周日
 
Calendar.MONDAY //周一
 
Calendar.TUESDAY //周二
 
Calendar.WEDNSDAY //周三
 
Calendar.THURSDAY //周四
 
Calendar.FRIDAY //周五
  
Calendar.SATURDAY //周六

 3.2 常用方法

  • public static Calendar getInstance():创建Calendar类型的子类对象
  • public int get(int filed):根据日历字段,获取对应的值(field一般是上边所提到的静态变量)
  • public final void set(**):设置时间,有多个重载,设置单字段/年月日/年月日时分/年月日时分秒
  • public abstract void add(int field,int amount):根据日历规则,将指定的时间量添加或者减去给定的日历字段
  • Date getTime():返回一个Date表示日历的时间

代码样例:

Calendar c= Calendar.getInstance();

int year=c.get(Calendar.YEAR);
System.out.println(year+"年");
//输出:2023年

Calendar c2= Calendar.getInstance();
c2.set(2018, 2, 14);
year=c2.get(Calendar.YEAR);
month=c2.get(Calendar.MONTH);
date=c2.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2018年2月14日
c2.set(Calendar.DATE,2);
date=c2.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2018年2月2日

//3年后的今天
Calendar c3= Calendar.getInstance();
c3.add(Calendar.YEAR, 3);
year=c3.get(Calendar.YEAR);
month=c3.get(Calendar.MONTH)+1;
date=c3.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2026年8月14日
 
//13年后的五天前
c3.add(Calendar.YEAR, 10);
c3.add(Calendar.DATE, -5);
year=c3.get(Calendar.YEAR);
month=c3.get(Calendar.MONTH)+1;
date=c3.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2036年8月9日

Calendar c=Calendar.getInstance();
Date d=c.getTime();
System.out.println(d);
//输出:Mon Aug 14 10:32:07 CST 2023

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java---日期类汇总 的相关文章

  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav

随机推荐

  • org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here

    在springCloud网关启动时报了这样一个错 大概意思是 映射不允许在这 最后发现时yml文件里 处id uri predicates 以及filter没有对齐 他们是同级的 报这个错一般是配置文件里路由没配置好
  • qt exec 跟show的区别

    1 要理清两个函数的区别 首先需要理解窗口模式 模式窗口 窗口会原地阻塞 只能操作该窗口 其余窗口不能再操作 只有关闭该窗口后 代码处才会获得返回值 阻塞停止 就可以操作其它界面了 半模式窗口 窗口会原地伪阻塞 虽然也是只能操作该窗口 其余
  • vue3中一个组件调用另外一个组件的方法

    vue3中一个组件调用另外一个组件的方法 1 组件化开发是vue的比较常用的 这里简单写一个vue3的组件化开发demo案例 组件1
  • C语言中的强符号和弱符号

    一 强弱符号 强弱符号针对的是处于同一工程下在不同源文件下定义的全局变量符号 链接器只处理global的符号而不处理local的符号 链接的核心是符号的重定位 在符号引用的地方找到符号定义的地方 包括函数产生的符号和全局变量产生的符号 强符
  • 刷脸支付是当下科技发展的主流旋律

    科技发展的初衷是为人民服务 而更快捷便利的为人民服务 则是当下科技发展的主流旋律 就拿超市结账来说 以前是排着队 等收银员一件件扫完商品码之后 再掏出现金进行结账 这样不仅效率慢 而且收银员还辛苦 后来进化到刷卡 扫描二维码 效率虽然提升了
  • 学术文献也有身份证?

    关注 心仪脑 查看更多脑科学知识的分享 关键词 科普散文 干货分享 生活中 证明你是你很简单 只需拿出你的身份证或护照 其实 学术文献也有如假包换 具有唯一性的身份证 对于经常需要下载文献的同学们来说 肯定再熟悉不过了 那就是文献的DOI号
  • OpenGL渲染结果发生了奇怪的拉伸和奇怪的彩条

    部分代码如下 Load create texture and generate mipmaps int width height unsigned char image SOIL load image 1 jpg width height
  • 【分享】docker引发的172.17.x.x网段无法访问

    前言 想搭建一个测试环境 折腾vmware虚拟机 发现公司的172 17网段怎么都访问不了 使用traceroute 发现 一直走172 17 0 1 无论是怎么更改配置 都是如此 查阅资料发现 当 Docker 启动时 会自动在主机上创建
  • jquery-migrate-1.2.1.min.js 作用

    在网上下载一些 js 插件使用的时候 经常出现这种情况 但是更换低版本 jquery 比如 使用 1 7 版本的 jquery 却不会报错 能正常使用 经过一番搜索 发现是因为高版本 1 9版本以后 不兼容以前的 需要引入一个 jquery
  • linux虚拟机安装后查不到IPV4地址的解决办法

    由于选择了桥接方式 网络配置设置不正确导致 编辑network配置文件 解决此问题 cd etc sysconfig network scripts vi enp0s3 若为做特殊修改 此名字是你打ifconfig查看显示的名字 改成如下配
  • AntDesign Pro安装过程

    详细资料请到官网查看文档 Ant Design Pro相关系列文章 一 AntDesign Pro安装过程 二 基于Ant DesignPro实现通过SpringBoot后台加载自定义菜单 前端部分 三 基于Ant DesignPro实现通
  • Excel数据过大,导出超时解决方案

    问题 随着业务量的增加 数据存储也越来越大 当我们从数据库读取数据生成excel时 往往会出现超时情况 尝试解决方案 考虑直接更改该请求的超时时长 但发现 随着数据增长 依然会出现超时情况 考虑采用多线程的方式 理论可以加快数据的读取效率
  • 二叉树17:路径总和

    主要是我自己刷题的一些记录过程 如果有错可以指出哦 大家一起进步 转载代码随想录 原文链接 代码随想录 leetcode链接 112 路径总和 112 路径总和 题目 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum
  • 【C进阶】深度剖析数据在内存中的存储

    目录 一 数据类型的介绍 1 类型的意义 2 类型的基本分类 二 整形在内存中的存储 1 原码 反码 补码 2 大小端介绍 3 练习 三 浮点型在内存中的存储 1 一个例子 2 浮点数存储规则 一 数据类型的介绍 前面我们已经学习了基本的内
  • 《kubernetes-1.8.0》20-examples-Deployments

    kubernetes 1 8 0 20 examples Deployments kubernetes 1 8 0 测试环境安装部署 时间 2017 12 19 一 基础知识 Deployment 为 Pod 和 ReplicaSet 提供
  • AI 机器学习实践总结

    机器学习基础 什么是机器学习 机器学习是一种从数据生成规则 发现模型 来帮助我们预测 判断 分组和解决问题的技术 机器学习是一种从数据中生产函数 而不是程序员直接编写函数的技术 说起函数就涉及到自变量和因变量 在机器学习中 把自变量叫做特征
  • 力扣(LeetCode)算法_C++——存在重复元素 II

    存在重复元素 II 给你一个整数数组 nums 和一个整数 k 判断数组中是否存在两个 不同的索引 i 和 j 满足 nums i nums j 且 abs i j lt k 如果存在 返回 true 否则 返回 false 示例 1 输入
  • 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库 Shared Library 概念 其实从文件结构上来讲 共享库和共享对象没什么区别 Linux下的共享库就是普通的ELF共享对象 由于共享对象可以被各个程序之间共享 所以它也就成为了库的很好的存在形式 很多库的开发者都以共享对象的
  • tensorflow学习笔记二:入门基础

    基本概念 使用TensorFlow前必须明白的基本概念 图 Graph 图描述了计算的过程 TensorFlow使用图来表示计算任务 张量 Tensor TensorFlow使用tensor表示数据 每个Tensor是一个类型化的多维数组
  • java---日期类汇总

    java中常用的日期类有Date SimpleDateFormat Calendar这三种 现在分别对三个类的日常使用进行大概的总结 1 Date类 1 1 基本介绍 一般常用的事Java util Date包下的Date类 在java s