Java中的日期时间类详解

这篇具有很好参考价值的文章主要介绍了Java中的日期时间类详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、Date类

1. 基本概念

2. 常见方法

2.1 日期比较

2.2 使用 SimpleDateFormat 格式化日期

二、DateFormat类

1. 基本概念

2. 常见方法

2.1 构造方法

2.2 DateFormat类常用方法

三、Calendar类

1. 基本概念

2. 常用方法

2.1 构造方法

2.2 常用方法

总结


前言

最近在实习过程中遇到了许多处理日期时间相关的需求,例如时间的加减及时间格式的互相转换。Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念、常见操作及相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。


一、Date类

1. 基本概念

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

第一个构造函数使用当前日期和时间来初始化对象。

Date( )

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

Date(long millisec)

		Date date2= new Date();
        System.out.println(date2);


        //参数表示1970-01-01 00:00:00到指定时间的毫秒数
        Date date1 = new Date(14686531L);
        System.out.println(date1);

2. 常见方法

2.1 日期比较

Java使用以下三种方法来比较两个日期:

  1. 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
  2. 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
  3. 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。

2.2 使用 SimpleDateFormat 格式化日期

因为使用Date类与字符串时间相互转化十分困难,因此,可以考虑通过Date类的其他子类来间接进行转换。DateFormat是日期/时间格式化子类的抽象类,它与以语言无关的方式格式化并解析日期或时间,是抽象类。所以使用其子类SimpleDateFormat实现日期和字符串的相互转换。

public static void main(String[] args) throws Exception {

        // 定义输出格式   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将字符串转化为日期   
        Date date = sdf.parse("2023-11-11 11:11:11");
        System.out.println(date);

        Date date = new Date();
        // 将日期转化为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println(str);
    }

二、DateFormat类

1. 基本概念

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

  • 格式化:按照指定的格式,从Date对象转换为String对象。(format)
  • 解析:按照指定的格式,从String对象转换为Date对象。(parse)

2. 常见方法

2.1 构造方法

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

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

常用的格式规则为:

标识字母(区分大小写) 含义
y
M
d
H
m
s

创建SimpleDateFormat对象的代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Demo02SimpleDateFormat {
    public static void main(String[] args) {
        // 对应的日期格式如:2023-11-11 11:11:11
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}

2.2 DateFormat类常用方法

DateFormat类的常用方法有:

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

format方法的代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}

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

parse方法的代码如下:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2023年11月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2023
    }
}

三、Calendar类

1. 基本概念

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

2. 常用方法

2.1 构造方法

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

例如:

import java.util.Calendar;

public class Demo06CalendarInit {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
    }    
}

2.2 常用方法

根据Calendar类的API文档,常用方法有:

  • public int get(int field):返回给定日历字段的值。
  • public void set(int field, int value):将给定的日历字段设置为给定值。
  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

Calendar类中提供很多成员常量,代表给定的日历字段:

字段值 含义
YEAR
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

1. get/set方法

get方法用来获取指定字段的值,set方法用来设置指定字段的值。代码实例如下:

import java.util.Calendar;
public class Demo {
    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        // 获取年 
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
import java.util.Calendar;

public class Demo07CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 设置年
        cal.set(Calendar.YEAR, 2023);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}

2. add方法

add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。代码如:

import java.util.Calendar;

public class Demo08CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");

        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 5); // 加5天
        cal.add(Calendar.YEAR, -2); // 减2年
        // 获取年
        year = cal.get(Calendar.YEAR);
        // 获取月
        month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
    }
}

3. getTime方法:返回对应的Date对象

Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

import java.util.Calendar;
import java.util.Date;

public class Demo {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); 
    }
}

注意事项:

  1. ​ 西方星期的开始为周日(1)周一(2),中国开始为周一,因此可以-1使用。
  2. ​ 在Calendar类中,月份的表示是以0-11代表1-12月(可以+1使用)。
  3. ​ 日期是有大小关系的,时间靠后,时间越大。

总结

 Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念、常见操作及相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。文章来源地址https://www.toymoban.com/news/detail-716182.html

到了这里,关于Java中的日期时间类详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

    日期和时间在软件开发中经常被用到,无论是用于记录事件、计算时间间隔还是格式化日期以供用户友好的展示。Java 提供了强大的日期和时间处理工具,其中 SimpleDateFormat 类是一个重要的工具,用于格式化日期和时间,同时也支持解析日期和时间。本篇博客将深入探讨 Sim

    2024年02月09日
    浏览(46)
  • Java:时间日期类

    同样位于java.util包下。 在java中,获取时间最简单的方式就是直接实例化Date类。 以自定义格式,取当前的时间日期: 之前可以用Date类来获取当前日期和时间的结构信息,比如说: 不过以上API都是属于废弃API,看描述是从1.1开始就废弃掉了可能。 Calendar类位于java.util包下,是

    2024年02月10日
    浏览(30)
  • Java 时间和日期类

    一、Calender类         1.构造方法         Calendar类是一个抽象类,不能通过new+构造方法的方式创建对象,构造方法 protected  Calendar()  ;protected  Calendar(TimeZone zone, Locale aLocale) ,构造方法是protected修饰的,其他的非子类中不能通过new+构造方法的方式创建对象,但他提供

    2024年02月10日
    浏览(25)
  • Java 获取当前日期和时间

     System.currentTimeMillis() 获取标准时间可以通过 System.currentTimeMillis() 方法获取,此方法不受时区影响,得到的结果是时间戳格式的。例如: 我们可以将时间戳转化成我们看得懂的形式 则该时间戳对应的时间为 值得注意的是,此方法会根据我们系统时间返回当前值,因为世界各

    2024年02月05日
    浏览(36)
  • Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间

    Scanner 类用于获取用户输入,它位于 java.util 包中。 要使用 Scanner 类,请执行以下步骤: 导入 java.util.Scanner 包。 创建一个 Scanner 对象,并将其初始化为 System.in 。 使用 Scanner 对象的方法读取用户输入。 Scanner 类提供了各种方法来读取不同类型的数据: 方法 描述 nextBoolean()

    2024年03月09日
    浏览(86)
  • Java计算时间差、日期差

    在java中,计算时间差或日期差有多种方法,以下提供五种示例: 目录 一、使用 Instant 和 Duration 类计算时间差 二、使用 LocalDate 和 ChronoUnit 类计算日期差 三、使用 Joda-Time 库计算时间差和日期差 四、使用 Instant 和 Period 类计算日期差 五、使用 Java 8 的 java.time.tempo

    2024年02月14日
    浏览(35)
  • JAVA获取昨日和今日日期时间

    2024年01月16日
    浏览(32)
  • Java:日期毫秒值和常见日期时间格式相互转换

    本文介绍了Java中,日期毫秒值和常见日期格式相互转换。 提示:以下是本篇文章正文内容,下面案例可供参考 代码示例: 代码示例: 如果想将指定时间转换为毫秒值,相对比较麻烦,这里提供两种方法供参考 利用Calendar.set() 利用DateFormat.parse() 本文介绍了Java中如何将毫秒

    2024年02月16日
    浏览(29)
  • 【Java 基础篇】Java Calendar 类:日期和时间处理指南

    在 Java 中,日期和时间的处理是常见的任务之一。为了更灵活地处理日期和时间,Java 提供了 java.util.Calendar 类,它提供了一种面向对象的方式来操作日期和时间。本篇博客将详细介绍 Calendar 类的使用方法,特别是面向基础小白的读者。 Calendar 类是 Java 中用于处理日期和时间

    2024年02月04日
    浏览(33)
  • 【JAVA进阶篇】时间与日期相关类

    2023年06月26日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包