掌握Java Date类:用法、弊端与时间戳转换技巧,助你轻松处理日期时间

咦咦咦,各位小可爱,我是你们的好伙伴------bug菌,今天又来给大家普及Java SE之Date类啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

js 复制代码
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在Java中,日期和时间的处理是一个重要而又繁琐的任务。而Date类则是处理日期和时间的基础类。本文将介绍Java中Date类的用法、弊端和时间戳转换技巧,以帮助开发人员轻松处理日期和时间。

摘要

本文将介绍Java中Date类的基本用法,如日期和时间的格式化、解析。同时,本文也将介绍Date类存在的一些弊端,如线程安全性和可变性等问题。最后,本文还将介绍时间戳与Date类之间的转换技巧,以便于在处理日期和时间时更加灵活和高效。

Java Date类

简介

Date类是Java中用于表示日期和时间的类,该类提供了一系列方法来处理日期和时间。如下我们将来给同学们介绍一些常用的方法,积极的帮助同学们入门,了解及掌握。

Date类的基本用法

Date类的构造方法

Date类是Java.util包中的一个基础类,主要用于处理日期和时间。Date类的构造方法有多种形式,可以传入时间戳或者年、月、日、时、分、秒等参数。

java 复制代码
// 使用无参构造方法创建当前时间的Date对象
Date date = new Date();
// 使用时间戳创建Date对象
Date date = new Date(1577778314000L);
// 使用年、月、日、时、分、秒参数创建Date对象
Date date = new Date(2020-1900, 0, 1, 0, 0, 0);

获取当前时间(年、月、日、时、分、秒等信息)

除了构造方法之外,Date类还提供了很多方法,用于获取或设置日期和时间的年、月、日、时、分、秒等信息。

java 复制代码
// 获取当前时间的年份
int year = date.getYear() + 1900;
// 获取当前时间的月份
int month = date.getMonth() + 1;
// 获取当前时间的日期
int day = date.getDate();
// 获取当前时间的小时数
int hour = date.getHours();
// 获取当前时间的分钟数
int minute = date.getMinutes();
// 获取当前时间的秒数
int second = date.getSeconds();
//打印结果
System.out.printf("当前时间:%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);

运行截图如下:

获取指定时间

Java中可以通过Date类的有参构造函数来获取指定时间,代码示例如下:

java 复制代码
        Date date1 = new Date(1750976000000L); // 毫秒数
        System.out.println(date1);

运行截图如下:

日期时间的格式化

Date类还提供了一些用于格式化日期和时间的方法,如toString()方法和SimpleDateFormat类。

java 复制代码
        Date date = new Date();
        // 使用toString()方法获取日期和时间的字符串表示形式
        String str = date.toString();
        System.out.println("str:"+str);

        // 使用SimpleDateFormat类将日期和时间格式化成字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str1 = sdf.format(date);
        System.out.println("str1:"+str1);

运行截图如下:

时间比较

Java中可以通过Date类的compareTo()方法来比较两个日期时间的先后顺序。

代码示例如下:

java 复制代码
Date date1 = new Date(1640976000000L);
Date date2 = new Date(1640976100000L);
int result = date1.compareTo(date2);
System.out.println(result < 0 ? "date1在date2之前" : result == 0 ? "date1与date2相等" : "date1在date2之后");

述代码中,通过compareTo()方法比较了date1和date2两个日期时间的先后顺序。

输出结果如下:

date1在date2之前

输出结果截图如下:

Date类弊端

尽管Date类在处理日期和时间时非常实用,但是它也存在一些弊端。主要包括以下三个方面,具体请看如下:

线程安全问题

首先,Date类并不是线程安全的。如果在多线程环境下使用Date类,可能会出现并发问题,导致程序出现异常或者结果不一致。为了解决这个问题,可以使用线程安全的日期和时间处理类,如Java 8中的LocalDateTime类。

可变性

其次,Date类是可变的。也就是说,一旦创建了一个Date对象,它的值可能会被修改,导致程序出现异常或者结果不一致。解决这个问题的方法是使用不可变的日期和时间处理类,如Java 8中的Instant类。

时区问题

最后就是,Date类在处理时区问题时比较麻烦,因为该类始终表示的是本地时间,而不是UTC时间。在需要跨时区进行计算时,需要使用Calendar类或者第三方库来处理。

时间戳与Date类之间的转换技巧

时间戳是一种简单的日期和时间表示方式,它是一个长整型数字,表示自1970年1月1日零时零分零秒起至当前时间的总毫秒数。在Java中,可以使用System.currentTimeMillis()方法获取当前时间的时间戳,也可以使用Date类的getTime()方法获取该Date对象对应的时间戳。

java 复制代码
// 获取当前时间的时间戳
long timestamp = System.currentTimeMillis();
// 获取Date对象对应的时间戳
long timestamp = date.getTime();

测试结果如下:

时间戳与Date类之间的转换非常简单,只需要使用Date类的构造方法或者setTime()方法即可。

java 复制代码
// 将时间戳转换成Date对象
Date date = new Date(timestamp);
// 将Date对象转换成时间戳
long timestamp = date.getTime();

测试结果如下:

测试用例

为了验证上述代码的正确性,我们可以编写相应的测试用例。代码示例如下:

测试代码

测试用例代码如下:

java 复制代码
/**
 * Date类示例演示
 *
 * @author bug菌
 * @date 2023/10/16 17:12
 */
public class DateTest {

    public static void main(String[] args) {
        
        // 创建当前时间的Date对象
        Date date = new Date();
        // 获取年、月、日、时、分、秒
        int year = date.getYear() + 1900;
        int month = date.getMonth() + 1;
        int day = date.getDate();
        int hour = date.getHours();
        int minute = date.getMinutes();
        int second = date.getSeconds();
        System.out.printf("当前时间:%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);
        
        // 将Date对象格式化成字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println("当前时间:" + str);
        
        // 获取当前时间的时间戳
        long timestamp = System.currentTimeMillis();
        System.out.println("当前时间戳:" + timestamp);
        
        // 将时间戳转换成Date对象
        Date date2 = new Date(timestamp);
        System.out.println("时间戳转换成Date对象:" + date2);
        
        // 将Date对象转换成时间戳
        long timestamp2 = date2.getTime();
        System.out.println("Date对象转换成时间戳:" + timestamp2);
    }
}

测试结果

根据如上测试用例,执行结果如下,同学们请参考:

代码解析

如上测试代码演示了如何使用Java的Date类进行日期和时间的操作。如下是对该测试用例的代码步骤分析,以便于同学们加深理解。

  1. 首先创建一个Date对象,可以使用无参构造函数来创建当前时间的Date对象,也可以使用带参构造函数来创建指定时间的Date对象。

  2. 通过Date对象的方法获取年、月、日、小时、分钟、秒等时间信息。

  3. 使用SimpleDateFormat类将Date对象格式化成字符串,可以自定义输出格式。

  4. 获取当前时间的时间戳,使用System.currentTimeMillis()方法获取。

  5. 将时间戳转换成Date对象可以使用带参构造函数,将Date对象转换成时间戳可以使用getTime()方法。

小结

在Java中,Date类是处理日期和时间的基础类。本文介绍了Date类的基本用法,如日期和时间的格式化、解析。同时,本文也介绍了Date类存在的一些弊端,如线程安全性和可变性等问题。最后,本文还介绍了时间戳与Date类之间的转换技巧,以便于在处理日期和时间时更加灵活和高效。

附录源码

如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

Java中的日期和时间处理是一个重要而又繁琐的任务。Date类是处理日期和时间的基础类,虽然存在一些弊端,但是仍然是处理日期和时间的重要工具。掌握Date类的用法、弊端和时间戳转换技巧,可以使程序开发更加灵活、高效。

... ...

ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

📣关于我

我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


相关推荐
码银几秒前
Java 集合:泛型、Set 集合及其实现类详解
java·开发语言
东阳马生架构3 分钟前
Nacos简介—4.Nacos架构和原理
java
柏油15 分钟前
MySQL InnoDB 行锁
数据库·后端·mysql
咖啡调调。17 分钟前
使用Django框架表单
后端·python·django
白泽talk22 分钟前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师31 分钟前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员
一只叫煤球的猫1 小时前
你真的会用 return 吗?—— 11个值得借鉴的 return 写法
java·后端·代码规范
Asthenia04121 小时前
HTTP调用超时与重试问题分析
后端
颇有几分姿色1 小时前
Spring Boot 读取配置文件的几种方式
java·spring boot·后端
AntBlack1 小时前
别说了别说了 ,Trae 已经在不停优化迭代了
前端·人工智能·后端