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

news2025/1/12 20:54:48

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

🔥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-11
        int 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);//日期加200

        int 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.coloradmin.cn/o/1654290.html

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

相关文章

SOLIDWORKS Electrical电气元件智能开孔

实际的电气元器件安装中,一些元器件需要穿过孔洞安装,例如按钮、指示灯会在配电柜的控制面板上,需要穿过控制面板安装。这部分内容放在软件建模、装配时,往往比较复杂因为考虑孔的大小符合元器件规格、孔跟随元器件移动、同一元器…

Docker入门篇来啦~

文章目录 1虚拟化技术1.1 硬件级虚拟化1.2 操作系统级虚拟化 2 Docker是什么2.1 Docker介绍2.2 容器和虚拟机的区别2.3 为什么使用Docker 3 Docker运行环境部署3.1 Docker安装3.2 Docker服务启动 4 Docker核心组件4.1 镜像4.1.1 镜像的基本概念4.1.2 镜像的组成结构4.1.3 镜像的…

牛客 二叉树 NB1 牛群的最大高度

原题链接 就不采用, 递归的方式来做了, 自己弄个栈来做 用栈来保存路径, curr 表示当前的节点, pre 保留往回走时的上一步 如果是 用递归来做 它的栈链路是这样的, 可以做下参考 黄色表示返回 用栈模拟的话, 不可能模拟得一摸一样, 递归的话一个栈会经过3次, 第三次后就不…

去除图片水印软件-inpaint

一、普通使用教程 亲眼看看使用 Inpaint 从照片中删除不需要的元素是多么容易: 1.1加载图片 1.2 选择要纠正的问题区域 1.3 告别不需要的对象并保存 二、功能 1 修复旧照片 老并不总是意味着坏。我们拥有的一些旧照片对我们来说仍然很重要,因为它们仍…

OpenCV 入门(二)—— 车牌定位

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

[附源码]秦时明月6.2魔改版_搭建架设教程_附GM工具_安卓苹果

本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了 一. 演示视频 秦时明…

[嵌入式AI从0开始到入土]17_Ascend C算子开发

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

libcity/model/trajectory_loc_prediction/DeepMove.py

1 DeepMove 1.1 构造函数 1.2 初始化权重 1.3 forward 1.4 predict def predict(self, batch):score self.forward(batch)if self.evaluate_method sample:# build pos_neg_inedxpos_neg_index torch.cat((batch[target].unsqueeze(1), batch[neg_loc]), dim1)score tor…

VitePress快速上手

完整教程:https://blog.share888.top/note/front-end/vitePress/01-vitePress%E5%AE%89%E8%A3%85.html https://blog.share888.top/ VitePress快速上手 官方文档:https://vitepress.dev/zh/guide/markdown VitePress中文网:https://vitejs…

2024最新 Gradle 入门教程

🚀 2024最新 Gradle 入门教程 🌟 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍…

深度学习笔记_10YOLOv8系列自定义数据集实验

1、mydaya.yaml 配置方法 # 这里分别指向你训练、验证、测试的文件地址,只需要指向图片的文件夹即可。但是要注意图片和labels名称要对应 # 训练集、测试集、验证机文件路径,可以是分类好的TXT文件,也可以直接是图片文件夹路径 train: # t…

剁手党必看——转转红包使用规则与最优组合计算全解析

​ 1、省钱攻略基础之“了解平台红包使用规则” 2、举个栗子 3、最优红包组合计算方法进化过程 3.1、初代“笛卡尔乘积”版 3.2、二代“边算边比较Map聚合”版 3.3、三代“边算边比较数组索引定位”版 4、总结 1、省钱攻略基础之“了解平台红包使用规则” 规则一&#x…

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下,一家位于深圳的精密电子制造企业面临着前所未有的挑战:如何高效地将楼宇自动化系统与生产执行系统(MES)整合,实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…

Siemens-NXUG二次开发-创建块(长方体)特征、圆柱特征、圆锥或圆台特征、球体特征、管道特征[Python UF][20240504]

Siemens-NXUG二次开发-创建块(长方体)特征、圆柱特征、圆锥或圆台特征、球体特征、管道特征[Python UF][20240504] 1.python uf函数1.1 NXOpen.UF.ModlFeatures.CreateBlock11.2 NXOpen.UF.ModlFeatures.CreateCyl11.3 NXOpen.UF.ModlFeatures.CreateCon…

缓存雪崩、击穿、击穿

缓存雪崩: 就是大量数据在同一时间过期或者redis宕机时,这时候有大量的用户请求无法在redis中进行处理,而去直接访问数据库,从而导致数据库压力剧增,甚至有可能导致数据库宕机,从而引发的一些列连锁反应&a…

ORACLE 19C RAC DIAG进程消耗大量内存的分析

近期一个ORACLE 19C的RAC环境,多次出现数据库实例的后台进程DIAG消耗很多内存(达到20G),节点1、节点2都出现过次问题。 问题分析:通过对DIAG进程TRACE分析,结合在ORACLE官方后台进行问题、BUG查询匹配&…

什么样的行业适合做私域?

私域营销适用于各种行业,但以下几个行业尤其适合进行私域营销: 1、零售行业:私域营销可以帮助零售企业建立与顾客的直接联系,提高顾客忠诚度和复购率。通过私域营销,零售企业可以进行个性化推荐、定制化服务&#xff…

VALSE 2024 Workshop报告分享┆面向实际场景体验的多模态大模型DeepSeek VL

2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

视频改字祝福/豪车装X系统源码/小程序uniapp前端源码

uniapp视频改字祝福小程序源码,全开源。创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝福视频不再难! 想要为你的朋友或家人送上一份特别的祝福,让他们感受到你的真诚与关怀吗?现在…

通过Nginx转发admin连接licloud-api-develop接口

1.需求配置 在本地环境部署一套开发环境,方便开发金磊调试功能 所使用到的服务有nginx,mysql,rabbitmq,redis,docker 服务安装网上都有教程这里就不一一列举出来了,服务都配置好之后 开始组建开发环境 2…