详细分析Java中的Date类以及格式转换

前言

记录这篇文章的缘由,主要是涉及一个格式转换,对此深挖了这个类

在Java中,Date类是用于表示日期和时间的类。

位于java.util包中,是Java平台中处理日期和时间的基本类之一。然而,需要注意的是,Date类存在一些问题:

其中之一是它不支持国际化,而且在Java 8及以后版本中,推荐使用java.time包中的新日期和时间API(如LocalDate、LocalTime、LocalDateTime等)来替代Date类。

1. 基本知识

一、 以下是Date类的一些基本概念和作用:

  • 概念: Date类用于表示一个特定的时间点,精确到毫秒级别。
    存储的是从1970年1月1日午夜开始的毫秒数,这被称为“Unix时间”或“Epoch时间”。

  • 作用: Date类主要用于获取、表示和操作日期和时间。
    用于记录事件发生的时间、计算时间间隔等。

二、常用的Date类API包括:

构造方法获取时间设置时间时间比较格式转换
Date(): 创建一个表示当前时间的Date对象。

Date(long date): 根据指定的毫秒数创建一个Date对象。
getTime(): 返回从1970年1月1日00:00:00以来的毫秒数。setTime(long time): 设置Date对象的时间。before(Date when): 判断当前日期是否在指定日期之前。

after(Date when): 判断当前日期是否在指定日期之后。

equals(Object obj): 判断两个日期是否相等。
toString(): 将日期对象转换为字符串。

toLocaleString(): 将日期对象转换为本地化的字符串。

toGMTString(): 将日期对象转换为GMT时间字符串。

然而,由于Date类的一些缺陷,建议在新的应用中使用java.time包中的日期和时间API,以便更好地处理日期和时间的操作。

2. 格式化输出

一般Date格式化输出,会配合SimpleDateFormat这个类!

主要的参数如下:

字母含义
y
M年中的月份
w年中的周数
W月份中的周数
D年中的天数
d月份中的天数
F月份中的星期
E星期中的天数
aAm/pm 标记
H一天中的小时数(0-23)
k一天中的小时数(1-24)
Kam/pm 中的小时数(0-11)
ham/pm 中的小时数(1-12)
m小时中的分钟数
s分钟中的秒数
S毫秒数
z时区

例子如下:

import java.text.SimpleDateFormat;
import java.util.Date;

public class datetest {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat sd=new SimpleDateFormat("现在时间: "+"yyyy 年 MM 月 dd 日 E HH 点 mm 分 ss 秒");
        System.out.println(sd.format(now));
        sd = new SimpleDateFormat("一年中的第 D 天,一个月中的第 F 个星期 ,一年中的第 w 个星期,一个月中的第 W 个星期");
        System.out.println(sd.format(now));
    }
}

截图如下:

在这里插入图片描述

特别注意到是12小时和24小时的规则不大一样:

import java.text.SimpleDateFormat;
import java.util.Date;

public class datetest {
    public static void main(String[] args) {
        Date now = new Date();
        // yyyy-MM-dd hh:mm:ss 12小时
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //小写是12小时
        System.out.println(sdf.format(now));

        // yyy-MM-dd HH:mm:ss  24小时
        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//大写是24小时的
        System.out.println(sdf.format(now));

    }
}

截图如下:(由于时间点还没过下午,将就下~)

在这里插入图片描述

3. 格式转换

常用的转换主要是Date转换为String,或者String转换为时间格式!

一、Date转换为String:

public class datetest {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(sd.format(now));

        // 自定义格式
        sd = new SimpleDateFormat("M-dd");
        System.out.println(sd.format(now));
    }
}

截图如下:

在这里插入图片描述

二、String转换为Date:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class datetest {
    public static void main(String[] args) {
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        String now = "2024-01-21";

        try {
            // 转换为Date类型
            Date date = sd.parse(now);
            System.out.println(date);
            
            // 输出long的格式
            long time = date.getTime();
            System.out.println(time);
            
            // long格式之后转换为String来表示
            System.out.println(sd.format(time));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

    }
}

截图如下:

在这里插入图片描述

JavaDate与String之间的转换是非常常见的操作,因为不同的应用程序或组件使用的日期格式可能是不同的。因此,开发者需要使用工具来处理它们之间的转换。 下面是一个可用于Date与String相互转换的Java工具: public class DateUtil { // 将日期转换为字符串 public static String dateToString(Date date, String format) { SimpleDateFormat dateFormat = new SimpleDateFormat(format); return dateFormat.format(date); } // 将字符串转换为日期 public static Date stringToDate(String str, String format) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat(format); return dateFormat.parse(str); } } 在上面的代码dateToString方法用于将日期对象转换为字符串,并传入一个特定的日期格式。stringToDate方法用于将字符串转换为日期对象,并同样需要传入日期格式。它们都使用Java的SimpleDateFormat来实现这些转换。 使用这个工具,可以很方便地将日期对象转换为不同的字符串格式,或将不同格式的字符串转换为日期对象。例如: Date now = new Date(); String nowStr = DateUtil.dateToString(now, "yyyy-MM-dd HH:mm:ss"); System.out.println(nowStr); // 将输出当前时间的字符串表示,格式为"yyyy-MM-dd HH:mm:ss" String str = "2021-01-01 00:00:00"; Date newYear = DateUtil.stringToDate(str, "yyyy-MM-dd HH:mm:ss"); System.out.println(newYear); // 将输出日期对象表示"2021-01-01 00:00:00"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值