【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.mzph.cn/bicheng/8571.shtml

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

相关文章

SparkSQL优化

SparkSQL优化 优化说明 缓存数据到内存 Spark SQL可以通过调用spark.sqlContext.cacheTable("tableName") 或者dataFrame.cache(),将表用一种柱状格式( an inmemory columnar format)缓存至内存中。然后Spark SQL在执行查询任务…

PotPlayer v1.7.22218 全格式影音播放器,无广绿色版!

软件介绍 PotPlayer是一款多功能且免费的媒体播放软件,兼容多种音频和视频格式。提供了丰富的功能性以及个性化设置,以迎合不同用户的需求。友好的用户界面,允许用户自定义皮肤和快捷键,提升了操作的便利性。 此外,Po…

DenseCLIP环境配置

直接看raoyongming/DenseCLIP: [CVPR 2022] DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting (github.com) 但这里的环境配置可能和现在不太适配,自己配了好久没弄好 后面尝试了另外的版本的(但这个版本少了一些内容&#…

力扣打卡第二天

206. 反转链表 class Solution { public:ListNode* reverseList(ListNode* head) {// //迭代法// ListNode *pre nullptr;// ListNode *curr head;// while(curr){// ListNode *next curr -> next;// curr -> next pre;// pre curr;// curr next;/…

【吃透Java手写】1- Spring(上)-启动-扫描-依赖注入-初始化-后置处理器

【吃透Java手写】Spring(上)启动-扫描-依赖注入-初始化-后置处理器 1 准备工作1.1 创建自己的Spring容器类1.2 创建自己的配置类 ComponentScan1.3 ComponentScan1.3.1 Retention1.3.2 Target 1.4 用户类UserService Component1.5 Component1.6 测试类 2…

我独自升级崛起怎么下载 游戏下载教程分享

《我独自升级:崛起》这款游戏核心聚焦于激烈的战斗与角色的持续成长。新加入的玩家首要任务是熟悉基础攻击模式,随后深入探索技能组合策略与连贯招式的艺术,同时掌握防守与躲避技巧,这些都是战斗中不可或缺的关键。随着战斗的持续…

重写muduo之Thread、EventLoopThread、EventLoopThreadPool

目录 1、概述 2、Thread 2.1 Thread.h 3、EventLoopThread 3.1 EventLoopThread.h 3.2 EventLoopThread.cc 4、 EventLoopThreadPool 4.1 EventLoopThreadPool.h 4.2 EventLoopThreadPool.cc 1、概述 管理事件循环线程的调度的 打包了一个EventLoop和线程,…

项目经理【过程】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 【人】绩效 【过程】概念 【过程】原则 一、质量管理水平、质量管理的发展 1.1 质量管理水平 1.2 质量管理的发展 …

NAS选购全方位解析,性价比才是硬道理 | 2024年618威联通NAS选购攻略

NAS选购全方位解析,性价比才是硬道理 | 2024年618威联通NAS选购攻略 哈喽小伙伴们好,我是Stark-C~,临近618,今天和大家谈谈NAS的选购问题。 关注我的小伙伴都知道,经过我手头折腾的NAS设备非常多,除了群晖…

如果出现一个工具,可以让前端开发彻底不用再手写UI,这个工具意义大吗?干货!

求这样的一个工具,可以让后端开发、嵌入式开发、产品经理、UI设计师都能用,注意,不是在一个简单的静态页生成,也不是类似飞冰那种 generator ,而是真正让设计师和开发者在各自的那侧达成自治,可以做到吗&am…

;【排列【

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

如何使用Tushare+ Backtrader进行股票量化策略回测

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

ICode国际青少年编程竞赛- Python-2级训练场-列表入门

ICode国际青少年编程竞赛- Python-2级训练场-列表入门 1、 Dev.step(3)2、 Flyer.step(1) Dev.step(-2)3、 Flyer.step(1) Spaceship.step(7)4、 Flyer.step(5) Dev.turnRight() Dev.step(5) Dev.turnLeft() Dev.step(3) Dev.turnLeft() Dev.step(7) Dev.turnLeft() Dev.…

【数字经济】上市公司供应链数字化数据(2000-2022)

数据来源: 时间跨度:2000-2022年 数据范围:各上市企业 数据指标: 样例数据: 参考文献:[1]刘海建,胡化广,张树山,等.供应链数字化的绿色创新效应[J].财经研究,2023,49(03):4-18. 下载链接:https:…

Linux(openEuler、CentOS8)基于chrony企业内网NTP服务器搭建实验

一、知识点 chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的 chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf chronyc 通过 323 端口与 chronyd 交互,可监控 chronyd 的性能并在运…

基于springboot+vue+Mysql的口腔管理平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【3dmax笔记】026:挤出和壳修改器的使用

文章目录 一、修改器二、挤出三、壳 一、修改器 3ds Max中的修改器是一种强大的工具,用于创建和修改复杂的几何形状。这些修改器可以改变对象的形状、大小、方向和位置,以生成所需的效果。以下是一些常见的3ds Max修改器及其功能: 挤出修改…

Day22 代码随想录打卡|字符串篇---实现 strStr()

题目(leecode T28): 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1…

第 8 章 电机测速(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.3.3 电机测速01_理论 测速实现是调速实现的前提,本节主要介绍AB相增量式编码器测速原理。 1.概…