Java常用工具类之Date类和Calender类

news2024/9/24 21:29:28

1、 Date类中常用方法

1. Date类的常用方法

Date类的常用方法

方法

含义

new Date()

实例化Date对象,常见于获得系统当前时间

new Date(long time)

实例化Date对象,并根据具体的时间偏移量time设置时间

boolean after(Date when)

测试此日期是否在指定日期之后

boolean before(Date when)

测试此日期是否在指定日期之前

int compareTo(Date anotherDate)

比较两个日期的顺序。如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。

boolean equals(Object obj)

比较两个日期的相等性。

【例1-17】Date类常用方法练习


public class TestDate {
    public static void main(String[] args) {
        Date now = new Date();//获取当前系统时间
        System.out.println(now); //获取1970年1月1日1000毫秒之后的时间
        Date d1 = new Date(1000);
        System.out.println(now.after(d1));
        System.out.println(now.before(d1));
        System.out.println(now.compareTo(d1));
    }
}

程序运行结果:

true

false

1

Date类不支持国际化。现在我们更应该多使用Calendar类来实现日期和时间字段之间转换,使用DateFormat类来格式化和分析日期字符串,而Date中的相应方法已废弃。

2. Calender类

由于Date类的设计目的更多的是偏向于寻求一种简单的方式表达时间,所以从JDK1.1版本开始,在处理日期和时间时,系统推荐使用相对复杂、功能完备的Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

java.util.Calendar是一个抽象的基类,创建对象需要使用静态方法Calendar.getInstance()完成。通过Calendar对象可以获得详细的日历信息,例如年、月、日、小时、分和秒,Calendar的子类可以实现特定的日历系统。

1、使用Calendar类代表当前时间
Calendar c = Calendar.getInstance();

由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance()方法用来创建对象。

使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

2、使用Calendar类代表指定的时间
Calendar c1 = Calendar.getInstance();
c1.set(2009, 3 - 1, 9);

使用Calendar类代表指定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

set()方法的声明为:

public final void set(int year, int month, int date)

以上示例代码设置的时间为2009年3月9日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。如果只设定某个字段,例如日期的值,则可以使用如下set()方法:

public void set(int field, int value)

在该方法中,参数field代表要设置的字段的类型,常见类型如下:

Calendar.YEAR——年份

Calendar.MONTH——月份

Calendar.DATE——日期

Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

Calendar.HOUR——12小时制的小时数

Calendar.HOUR_OF_DAY——24小时制的小时数

Calendar.MINUTE——分钟

Calendar.SECOND——秒

Calendar.DAY_OF_WEEK——星期几

后续的参数value代表,设置成的值。例如:

Calendar c1 = Calendar.getInstance();
c1.set(Calendar.DATE,10);

该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

3、从Calendar对象中获得信息

使用Calendar类中的get()方法可以获得Calendar对象中对应的信息,

get()方法的声明如下:

public int get(int field);

其中参数field代表需要获得的字段的值,字段说明和上面的set()方法保持一致。需要说明的是,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。

	Calendar c2 = Calendar.getInstance();
  int year = c2.get(Calendar.YEAR); //年份
	int month = c2.get(Calendar.MONTH) + 1; //月份
  int date = c2.get(Calendar.DATE); //日期
  int hour = c2.get(Calendar.HOUR_OF_DAY); //小时
  int minute = c2.get(Calendar.MINUTE); //分钟
  int second = c2.get(Calendar.SECOND); //秒
  int day = c2.get(Calendar.DAY_OF_WEEK); //星期几
  System.out.println("年份:" + year);
  System.out.println("月份:" + month);
  System.out.println("日期:" + date);
  System.out.println("小时:" + hour);
  System.out.println("分钟:" + minute);
  System.out.println("秒:" + second);
  System.out.println("星期:" + day);
4、其它方法说明

Calendar类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。

(1) add()方法

public abstract void add(int field,int amount)

该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加时amount的值为正,减少时amount的值为负。

例如,计算一下当前时间100天以后的日期,代码如下:

Calendar c3 = Calendar.getInstance();
c3.add(Calendar.DATE, 100);
int year1 = c3.get(Calendar.YEAR);
int month1 = c3.get(Calendar.MONTH) + 1; //月份
int date1 = c3.get(Calendar.DATE); //日期
System.out.println(year1 + "年" + month1 + "月" + date1 + "日");

这里add()方法是指在c3对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期,例如若当前时间为2015年8月7日,则程序的输出结果为:2015年11月15日

(2) after()方法

public boolean after(Object when)

该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:

Calendar c4 = Calendar.getInstance();
c4.set(2009, 10 - 1, 10);
Calendar c5 = Calendar.getInstance();
c5.set(2010, 10 - 1, 10);
boolean b = c5.after(c4);
System.out.println(b);

在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after()方法的返回值是true。

另外一个类似的方法是before(),该方法是判断当前日期对象是否位于另外一个日期对象之前。

(3) getTime()方法

public final Date getTime()

该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。

类似的方法是setTime(),该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:

public final void setTime(Date date)

转换的示例代码如下:

Date d = new Date();
Calendar c6 = Calendar.getInstance();
//Calendar类型的对象转换为Date对象
Date d1 = c6.getTime();
//Date类型的对象转换为Calendar对象
Calendar c7 = Calendar.getInstance();
c7.setTime(d);
5、Calendar对象和相对时间之间的互转  
Calendar c8 = Calendar.getInstance();
  long t = 1252785271098L;
  //将Calendar对象转换为相对时间
  long t1 = c8.getTimeInMillis();
  //将相对时间转换为Calendar对象
  Calendar c9 = Calendar.getInstance();
  c9.setTimeInMillis(t1);

在转换时,使用Calendar类中的getTimeInMillis()方法可以将Calendar对象转换为相对时间。在将相对时间转换为Calendar对象时,首先创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis()方法设置时间即可。

3. Calendar 类常用属性

Calendar类的常用属性

属性

含义

public final static int HOUR

小时时间

public final static int MINUTE

分时间

public final static int SECOND

秒时间

public final static int DATE

日期的Date部分

public final static int MONTH

日期的Month部分

public final static int YEAR

日期的年部分

【例】Calendar类使用练习

   public class TestCalendar {
        public static void main(String[] args) {
            //获取Calendar类的实例
            Calendar c = Calendar.getInstance();
            System.out.println(c.get(Calendar.YEAR)+"年"+
                               (c.get(Calendar.MONTH)+1)+"月"+
                               c.get(Calendar.DAY_OF_MONTH)+"日");        
            //设置指定时间
            c.set(2011,10,11);
            System.out.println(c.get(Calendar.YEAR)+"年"+ (c.get(Calendar.MONTH)+1)+"月"+      
                               c.get(Calendar.DAY_OF_MONTH)+"日");
            Calendar c1 = Calendar.getInstance();
            Calendar c3 = Calendar.getInstance();
            c3.add(Calendar.DATE, 100);
            int year1 = c3.get(Calendar.YEAR);
            int month1 = c3.get(Calendar.MONTH) + 1; //月份
            int date1 = c3.get(Calendar.DATE); //日期
            System.out.println(year1 + "年" + month1 + "月" + date1 + "日");
        }
    }

程序分析:本例使用时间和日期处理方法进行计算。该程序实现的原理为:首先代表两个特定的时间点,这里使用Calendar的对象进行代表,然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以1天的毫秒数(24小时X60分钟X60秒X1000毫秒)即可获得对应的天数。

【例】输出当前月的月历,该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是2009年3月10日,则输出2009年3月的日历。

import java.util.Calendar;
public class DateExample2{
    public static void main(String[] args){
        //获得当前时间
        Calendar c = Calendar.getInstance();
        //设置代表的日期为1号
        c.set(Calendar.DATE,1);
        //获得1号是星期几
        int start = c.get(Calendar.DAY_OF_WEEK);
        //获得当前月的最大日期数
        int maxDay = c.getActualMaximum(Calendar.DATE);   
        //输出标题
        System.out.println("星期日星期一星期二星期三星期四星期五星期六");
        //输出开始的空格
        for(int i = 1;i < start;i++){
            System.out.print("   "); 
        }
        //输出该月中的所有日期
        for(int i = 1; i <= maxDay; i++){
            //输出日期数字
            System.out.print(" " + i);
            //输出分隔空格
            System.out.print("    ");
            if(i < 10){
                System.out.print(' ');
            }
            //判断是否换行
            if((start + i - 1) % 7 == 0){
                System.out.println();       
            }
        }
        //换行
        System.out.println();       
    }       
}

程序运行结果:

程序分析:该程序实现的原理为:首先获得该月1号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果1号是星期一,则打印一个单位的空格,如果1号是星期二,则打印两个单位的空格,依次类推。打印完星期六的日期以后,进行换行。

4. SimpleDateFormat类的使用

java.text.SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类,是抽象类java.text.DateFormat类的子类.

SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式,获取SimpleDateFormat的实例如下:

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

上面代码确立了转换的格式,yyyy是完整的西元年,MM是月份,dd是日期,HH:mm:ss分别是小时、分和秒。至于为什么有的格式大写,有的格式小写,那是怕避免混淆,例如MM是月份,mm是分;HH是24小时制,而hh是12小时制,下表列出了SimpleDateFormat类中的模式字母。

SimpleDateFormat类中的模式字母

字母

日期或时间元素

y

M

年中的月份

d

月份中的天数

E

星期中的天数

a

Am/pm 标记

H

一天中的小时数(0-23)

h

am/pm 中的小时数(1-12)

m

小时中的分钟数

s

分钟中的秒数

S

毫秒数

1.字符串转日期:

字符串"2002-10-8 15:30:22",如果要把它转成日期,可以用以下代码:

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

Date date=sdf.parse("2002-10-8 15:30:22"); 

2.日期转字符串:

假如把今天的日期转成字符串可用

String datestr=sdf.format(new Date()); 

这个字符串的内容便类似2002-10-08 14:55:38

透过这个API我们便可以随心所欲的将日期转成我们想要的字符串格式,例如希望将日期输出成2002年10月08日,可以这么写:

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日"); 

String dateStr=sdf.format(new Date()); 

dateStr便会依照我们设定的格式输出。

【例】SimpleDateFormat的使用。

public class TestDateFormat {
   public static void main(String[] args) {
       //获取指定日期格式的SimpleFormat实例 1999年09月09日 12:12:12
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");           //获取指定日期的格式化字符串
		  String nowStr = sdf.format(new Date());
       System.out.println(nowStr);    
       //将格式化的字符串转换成日期
       try {
             Date d = sdf.parse("2011-11-11 11:11:11");
             System.out.println(d);
         } catch (ParseException e) {
            System.out.println("输入的字符串不符合日期的格式");
            e.printStackTrace();
}    
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073987.html

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

相关文章

C语言 | Leetcode C语言题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; int getSum(int a, int b){ int c; while(b) {c(unsigned int)(a&b)<<1;a^b;bc; }return a; }

静态网页的制作步骤

静态网页是由HTML、CSS和JavaScript等前端技术构建而成的&#xff0c;它们通常用于展示静态内容&#xff0c;不涉及动态数据的处理。制作静态网页的过程涉及多个步骤&#xff0c;包括规划、设计、编码和测试等。下面是一个详细的制作静态网页的步骤&#xff0c;希望对你有帮助。…

Apache Flink内存模型

Flink 内存模型 大数据中所有开源的框架都会使用到JVM&#xff0c;不如&#xff0c;MapReduce&#xff0c;Storm&#xff0c;Spark等&#xff0c;这些计算框架处理数据过程中涉及到将大量数据存储到内存中&#xff0c;此时如果内存管理过渡依赖JVM&#xff0c;会出现java对象存…

国产GD32单片机开发入门(二)GD32单片机详解

文章目录 一.概要二.单片机型号命名规则三.GD32F103系统架构四.GD32F103C8T6单片机启动流程五.GD32F103C8T6单片机主要外设资源六.单片机开发过程中查看芯片数据手册的必要性1.单片机外设资源情况2.GD32单片机内部框图3.GD32单片机管脚图4.GD32单片机每个管脚功能5.单片机功耗数…

Mybatis--其他查询操作和数据库连接池(下下)

序 准备工作&#xff1a; mysql数据库和表的信息更新&#xff1a; DROP TABLE IF EXISTS articleinfo;CREATE TABLE articleinfo (id INT PRIMARY KEY auto_increment,title VARCHAR ( 100 ) NOT NULL,content TEXT NOT NULL,uid INT NOT NULL,delete_flag TINYINT ( 4 ) DEF…

24 messagebox 组件

messagebox 组件使用指南 Tkinter messagebox 组件用于创建弹出式消息框&#xff0c;以显示信息、警告、错误或询问用户问题。它提供了一种简单的方法来向用户展示消息&#xff0c;并等待用户响应。以下是对 messagebox 组件的详细说明和一个使用案例。 messagebox 组件方法 …

数学基础(十)

一、层次聚类 层次聚类是聚类算法的一种&#xff0c;通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中&#xff0c;不同类别的原始数据点是树的最低层&#xff0c;树的顶层是一个聚类的根节点。 常见聚类树有自下而上合并和自上而下分裂两种方法 …

【计算机网络】mini HTTP服务器框架与代码

注注注&#xff1a;本篇博文都是代码实现细节&#xff0c;但不会进行演示&#xff0c;演示看孪生篇 另外&#xff0c;由于tcp套接字部分本质都是套路&#xff0c;所以就不再进行赘述。 目录 1 请求反序列化2 读取url文件内容3 构建响应 1 请求反序列化 我们肯定会先收到请求&…

VIVO社招入职SHL测评题库题型分析:动机问卷、性格问卷、归纳推理、数字推理、语言推理

VIVO社招入职SHL测评数字推理考什么&#xff1f;例题分析 VIVO社招入职SHL测评归纳推理考什么&#xff1f;例题分析

资产架构端口应用CDNWAF站库分离负载均衡

知识点&#xff1a; 1、资产架构-端口&目录&插件接口&多站点&多应用 2、番外安全-域名&服务器本身&服务厂商&管理人员 3、考虑阻碍-站库分离&CDN&WAF&负载均衡&主机防护 详细点&#xff1a; 1、前置条件-购买使用-云服务器&a…

【AI编程秘籍】Q-learning原理大揭秘!让AI学会自己做决策!

&#x1f31f;【AI编程秘籍】Q-learning原理大揭秘&#xff01;让AI学会自己做决策&#xff01;&#x1f680; Hey小伙伴们&#xff0c;今天要给大家带来的是一个非常酷炫的项目——深入浅出Q-learning原理&#xff01;无论你是编程新手还是AI老司机&#xff0c;都能从中收获满…

进阶-7.管理工具

管理工具 1.系统数据库2常用工具2.1 mysql2.2 mysqladmin2.3 mysqlbinlog2.4 mysqlshow2.5 mysqldump2.6mysqlimport /source 1.系统数据库 2常用工具 2.1 mysql C:\Users\Tracy>mysql -uroot -p123456 test -e "select * from student"; -------------------- |…

【小沐学Rust】Rust实现TCP网络通信

文章目录 1、简介2、安装2.1 安装Rust2.2 VsCode安装Rust插件 3、快速入门3.1 命令行构建3.2 Cargo构建3.3 Cargo添加依赖 4、基本语法4.1 main 的函数4.2 代码缩进4.3 todo! 宏4.4 println! 宏4.5 变量的使用4.6 元组4.7 结构4.8 枚举4.9 函数 5、TCP通信5.1 测试一5.1.1 TCP服…

【HTML】模拟二级菜单【附源代码】

模拟二级菜单 HTML部分&#xff1a; <!DOCTYPE html>: 声明文档类型为HTML5。<html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如字符集、标题和样式。 <meta charset"utf-8">: 设置文档的字符编码为UTF-8。<title>:…

企业级web应用服务器之Tomcat

Tomcat介绍 Tomcat 由 Apache 软件基金会下属的 Jakarta 项目开发。它实现了 Java Servlet 和 JavaServer Pages&#xff08;JSP&#xff09;等 Java EE 技术规范&#xff0c;为基于 Java 的 Web 应用程序提供运行环境。 主要特点 轻量级 Tomcat 是一个相对轻量级的服务器&am…

浏览器解析流程

思考 不知道大家是否思考过这几个问题&#xff1a; 当我们在浏览器中输入url后&#xff0c;到底发生了什么&#xff1f; h5&#xff0c;css&#xff0c;js代码执行的顺序是什么&#xff1f;什么情况下会阻塞页面&#xff1f;又有什么办法可以提高页面响应速度呢&#xff1f; 如…

再说圆的面积

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积&#xff0c;本文使用蒙特卡洛方法求解圆面积。 取&#xff08;0&#xff0c;1&#xff09;* (0,1)区间&#xff0c;也就是单位圆第一象限的端点区间对应的正方形区间。下面是计算机给出的结果&#xff1a;很显然第一象限…

基于vue3和audio封装的简易音频播放器

样式如图所示 <template><div class"audio-player"><div class"player_top" flex-ac flex-justify-between ><div class"fileName genericTitle" fs-28 l-height-32 height-64 pr-42 flex-ac><span class"t…

UE管理内容 —— FBX Morph Target Pipeline

目录 Naming Setting Up Morph Targets Importing Morph Targets Morph Target 是特定网格体的顶点位置的快照&#xff0c;该网格体在某种程度上已经变形&#xff1b;例如&#xff0c;可以使用一个角色模型&#xff0c;对其面部进行重塑以创建一个面部表情&#xff0c;然后将…

Linux 流式DMA映射(DMA Streaming Mapping)

流式DMA相关的接口为dma_map_sg(),dma_unmap_sg(),dma_map_single(),dma_unmap_single()。流式DMA一般用于已经分配好的内存&#xff0c;然后再对其进行DMA操作&#xff0c;而不是提前申请好一块cache一致性的内存给DMA用。例如从协议栈里发下来的一个包&#xff0c;想通过网卡…