【JAVA基础之时间API】自定义时间格式

 🔥作者主页:小林同学的学习笔录

🔥mysql专栏:小林同学的专栏

目录

1.Date类

1.1  概述

1.2  构造方法

1.3  常用方法       

2.SimpleDateFormat类

2.1  概述

2.2  构造方法

2.3  格式规则

2.4  常用方法

3.Calendar类

3.1  概述

3.2  常用方法

4.JDK8时间相关类


1.Date类

1.1  概述

Java的Date类是用来表示特定时间点的类。它位于java.util包中,是Java早期日期和时间处理的一部分。Date类的实例表示自1970年1月1日00:00:00 GMT以来的毫秒数。

在Java 8及更高版本中,推荐使用java.time包中的新日期和时间API,如LocalDateLocalTimeLocalDateTime,因为它们提供了更丰富和更方便的功能。

缺点:

  • Date对象是可变的,这意味着一旦创建,它的值可以被改变。这可能导致并发问题,线程不安全
  • Date类使用的时区是GMT,这可能导致在处理不同时区的应用程序时出现问题

1.2  构造方法

  • Date(): 创建表示当前时间的 Date 对象,从1970年1月1日00:00:00 GMT开始。

  • Date(long date): 创建一个表示从1970年1月1日00:00:00 GMT开始经过指定毫秒数的 Date 对象。

1.3  常用方法       

Date类中的多数方法已经过时,常用的方法有:

  • public long getTime() 把日期对象转换成对应的时间毫秒值,得到的是GMT到现在的毫秒数。

  • public void setTime(long time) 参数给定的毫秒值设置给日期对象,传参需要单位毫秒。

  • before(Date when): 检查当前日期是否在指定日期之前。

  • after(Date when): 检查当前日期是否在指定日期之后。

小结:Date表示特定的时间瞬间,我们可以使用Date对象对时间进行操作。

代码演示:

public class Demo01 {public static void main(String[] args) {Date date = new Date();long time = date.getTime();System.out.println(time);long customTime = 1620462871000L; // 表示2021年5月8日12:34:31//currentDate 对象的时间将被设置为2021年5月8日12:34:31的时间。date.setTime(customTime);long time1 = date.getTime();System.out.println(time1);}
}输出结果:1715160825915
1620462871000

2.SimpleDateFormat类

2.1  概述

java.text.SimpleDateFormat 是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,把Date对象转换为String对象。

  • 解析:按照指定的格式,把String对象转换为Date对象。

2.2  构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。

  • public SimpleDateFormat():无参构造器,按默认格式输出时间格式

2.3  格式规则

  • yyyy:四位数的年份(例如:2024)
  • yy:两位数的年份(例如:24,对应2024)
  • MM:两位数的月份(01表示一月,12表示十二月)
  • M:一位或两位数的月份(1表示一月,12表示十二月)
  • dd:两位数的日期(01到31)
  • d:一位或两位数的日期(1到31)
  • HH:两位数的小时数,使用24小时制(00到23)
  • H:一位或两位数的小时数,使用24小时制(0到23)
  • hh:两位数的小时数,使用12小时制(01到12)
  • h:一位或两位数的小时数,使用12小时制(1到12)
  • mm:两位数的分钟数(00到59)
  • m:一位或两位数的分钟数(0到59)
  • ss:两位数的秒数(00到59)
  • E:星期几的简写(例如:Sun、Mon、Tue等)
  • EE:星期几的长名(例如:Sunday、Monday、Tuesday等)

2.4  常用方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

拓展:

String formattedDate = sdf.format(new Date());这句代码new Date()得到的是一个毫秒数,底层做了什么变成指定格式?

当调用new Date()时,会创建一个Date对象,代表当前的日期和时间,以毫秒数的形式存储。然后在调用format()方法时,SimpleDateFormat类会将这个毫秒数转换为指定格式的日期字符串。在内部,SimpleDateFormat类会根据指定的日期格式,将毫秒数转换为年、月、日、时、分、秒等不同的时间单位,然后拼接成最终的格式化日期字符串。所以,实际上是SimpleDateFormat在底层根据指定的格式使用Date对象中的毫秒数进行计算和格式化,从而得到最终的格式化日期字符串。

代码演示:

public class Demo01 {public static void main(String[] args) {// 使用指定的日期格式创建SimpleDateFormat对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化当前日期String formattedDate = sdf.format(new Date());System.out.println("Formatted date: " + formattedDate);// 将字符串解析为日期对象String strDate = "2022-01-01 12:00:00";try {Date parsedDate = sdf.parse(strDate);System.out.println("Parsed date: " + parsedDate);} catch (Exception e) {System.out.println("Error parsing date: " + e.getMessage());}}
}输出结果:Formatted date: 2024-05-08 20:46:20
Parsed date: Sat Jan 01 12:00:00 CST 2022

3.Calendar类

3.1  概述

Calendar类是Java中用于操作日期和时间的类,它提供了一种处理日期和时间的方式,使得可以方便地进行日期和时间的计算、比较以及格式化。Calendar类是一个抽象类,因此不能直接实例化,通常通过getInstance()方法获取Calendar对象的实例。

3.2  常用方法

代码演示:

get演示

public class Demo01 {public static void main(String[] args) {//1.获取一个GregorianCalendar对象Calendar instance = Calendar.getInstance();//获取子类对象//2.打印子类对象System.out.println(instance);//3.获取属性int year = instance.get(Calendar.YEAR);int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11int day = instance.get(Calendar.DAY_OF_MONTH);int hour = instance.get(Calendar.HOUR);int minute = instance.get(Calendar.MINUTE);int second = instance.get(Calendar.SECOND);int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六"System.out.println(year + "年" + month + "月" + day + "日" +hour + ":" + minute + ":" + second);}
}

set演示

public class Demo02 {public static void main(String[] args) {//设置属性——set(int field,int value):Calendar c1 = Calendar.getInstance();//获取当前日期//计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日)c1.set(Calendar.YEAR, 1998);c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值c1.set(Calendar.DAY_OF_MONTH, 18);int w = c1.get(Calendar.DAY_OF_WEEK);System.out.println(w);}
}

add演示

public class Demo03 {public static void main(String[] args) {//计算200天以后是哪年哪月哪日,星期几?Calendar c2 = Calendar.getInstance();//获取当前日期c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200int y = c2.get(Calendar.YEAR);int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份int d = c2.get(Calendar.DAY_OF_MONTH);int wk = c2.get(Calendar.DAY_OF_WEEK);System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + "星期" + wk);}
}

4.JDK8时间相关类

一般时间可以用LocalDateTime类来自定义格式

用法:

public class Demo01 {public static void main(String[] args) {//1. 使用 now() 返回表示当前日期时间的 对象LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now() System.out.println(ldt);//2. 使用 DateTimeFormatter 对象来进行格式化// 创建 DateTimeFormatter 对象DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//把LocalDateTime对象转换为字符串String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期= " + format);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子商务对应的职业有哪些?10年互联网人透底行业秘密!

电子商务对应的职业有哪些?10年互联网人透底行业秘密! 事实说话,实事求是,不要再把美颜滤镜下的市场,传给新人小伙伴了! 大家好,我是微三云胡佳东,一家软件公司负责人! …

谷歌推广和seo运营具体怎么做?

要做好谷歌推广和SEO,两者都离不开关键词,关键词是连接你的内容和目标受众的桥梁,找对关键词都是非常重要的 无论是SEO还是谷歌推广,找到那些既有人搜又不是太多人竞争的关键词很关键。这样,在SEO上,你的网…

【论文阅读笔记】关于“二进制函数相似性检测”的调研(Security 22)

个人博客链接 注:部分内容参考自GPT生成的内容 [Security 22] 关于”二进制函数相似性检测“的调研(个人阅读笔记) 论文:《How Machine Learning Is Solving the Binary Function Similarity Problem》(Usenix Securi…

如何将jsp项目转成springboot项目

昨天说过,springboot推荐使用Thymeleaf作为前后端渲染的模板引擎,为什么推荐用Thymeleaf呢,有以下几个原因: 动静结合:Thymeleaf支持HTML原型,允许在HTML标签中增加额外的属性来实现模板与数据的结合。这样…

【抽样调查】分层抽样上

碎碎念:在大一大二时听课有的时候会发现听不太懂,那时候只觉得是我自己的基础不好的原因,但现在我发现“听不懂”是能够针对性解决的。比如抽样调查这门课,分析过后我发现我听不懂的原因之一是“没有框架”,一大堆知识…

2024.5.8 2.二叉树的最大深度 (简单)

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1,null,2] 输…

【LeetCode刷题记录】124. 二叉树中的最大路径和

124 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的…

C++语法|如何写出高效的C++代码(一)|对象使用过程中背后调用了哪些方法(构造和析构过程)?

文章目录 再探拷贝构造函数和重载复制运算符实例化新对象和赋值操作强转为类类型指针和引用时临时对象的构造和析构过程 考考你问题答案 再探拷贝构造函数和重载复制运算符 实例化新对象和赋值操作 首先我们写一个类,实现它的拷贝构造并重载赋值运算符。 class T…

pycharm中导入rospy(ModuleNotFoundError: No module named ‘rospy‘)

1. ubuntu安装对应版本ros ubuntu20.04可参考: https://wiki.ros.org/cn/noetic/Installation/Ubuntuhttps://zhuanlan.zhihu.com/p/515361781 2. 安装python3-roslib sudo apt-get install python3-roslib3.在conda环境中安装rospy pip install rospkg pip in…

快速话术本(常用文本快速复制工具)EXE成品+软件源码

功能介绍 经常性需要重复性的输入几个不同的文本,来回复制很麻烦,这个小工具可以帮你解决,把要经常输入的文本添加进去,点击即可复制~ 链接:https://pan.baidu.com/s/1TqtJ_Xb10k4j3dxSRjz47Q?pwdsl4l 提取码&…

springMVC入门学习

目录 1、 什么是springmvc 2、springmvc工作流程 3、 springmvc快速入门(XML版本) 4、加载自定义目录下的springmvc.xml配置文件 5、 解析器InternalResourceViewResolver 6、 映射器BeanNameUrlHandlerMapping 7、 适配器SimpleControllerHandle…

【linux】进程概念|task_struct|getpid|getppid

目录 ​编辑 1.进程的概念 进程的基本概念 进程与程序的主要区别 进程的特征 进程的状态 描述进程—PCB task_struct中的内容 查看进程 1.创建一个进程,运行以下代码 通过系统调用获取进程标示符 getpid()以及getppid() 1.进程的概念 进程的基本概念…