09

it2026-08-12  12

一、创建日期和时间对象(Date类)

1、初始化Date对象

Java提供了Date类来操作日期和时间,Date类也封装在java.util包中。

我们使用Date类时,需要先创建Date对象,Date类提供了两个构造函数来实例化Date对象:

编号构造方法说明功能描述1Date()使用当前日期和时间初始化对象分配Date对象并初始化此对象,使用当前日期和时间来初始化对象,精准到毫秒。2Date(long date)使用标准基准时间初始化对象分配Date对象并初始化此对象,表示从标准基准时间1970年1月1日起的毫秒数。

下面我们使用Date类的两种构造方法来创建Date对象

2、Date类常用方法

方法返回值描述after(Date date)boolean测试当前日期是否在指定日期之后before(Date date)boolean测试当前日期是否在指定日期之后clone( )Object返回此对象的副本。compareTo(Date date)int比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。compareTo(Object obj)int若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。equals(Object date)boolean当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。getTime( )long返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。hashCode( )int返回此对象的哈希码值。setTime(long time)void用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。toString( )String以字符串的形式输出Date对象

3、Date类方法的应用

import java.util.Date; public class DateDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("1、先创建当前时间对象,再使用getTime()方法过的基准时间以来毫秒数:"); Date date1 = new Date(); // 使用第一种构造方法创建Date对象 long date2 = date1.getTime(); //使用第二种构造方法创建Date对象 System.out.println("当前时间是:"+date1); System.out.println("从基准时间到当前时间的毫秒数是:"+date2); System.out.println("-------------------------------------------- "); System.out.println("2、先创使用System.currentTimeMillis()方法获得基准时间以来毫秒数,再转化成当前时间:"); long date3 = System.currentTimeMillis(); //获得基准时间以来的毫秒数 Date date4 = new Date(date3); //将基准时间以来的毫秒数换算成当前时间 System.out.println("从基准时间到当前时间的毫秒数是:"+date3); System.out.println("当前时间是:"+date4); } } Console: 1、先创建当前时间对象,再使用getTime()方法过的基准时间以来毫秒数: 当前时间是:Thu Oct 22 14:51:10 CST 2020 从基准时间到当前时间的毫秒数是:1603349470343 -------------------------------------------- 2、先创使用System.currentTimeMillis()方法获得基准时间以来毫秒数,再转化成当前时间: 从基准时间到当前时间的毫秒数是:1603349470364 当前时间是:Thu Oct 22 14:51:10 CST 2020 当前时间是:Thu Oct 22 14:51:10 CST 2020

⚠️注意:由于Date类创建对象的时间是变化的,所以每次运行程序在控制台输出的结果都不一样。

二、时间和日期的格式化

1、DateFormat类

从程序中直接输出Date对象,显示的格式是:“Thu Oct 22 14:51:10 CST 2020”,但是很多时候我们让日期以我们想要的格式输出,比如“2010-11-01”,“14:20:25”。这时候我们就需要用到java.text包中的DateFormat类了。

DateFormat类是一个日期的格式化类,用来格式化日期。DateFormat类是定义在java.test包中的。

(1)DateFormat类概述

DateFormat类的功能是按照指定格式对日期或者时间进行格式化,DateFormat类提供了4种默认的格式化风格,即SHORT、MEDIUM、LONG、FULL,其中:

SHORT:完全为数字,如01.13.2020或3:30pm;MEDIUM:较长,如Jan,01,2020;LONG::长,如Janurary 01,2020或3:30:52pm;FULL:完全指定,如Tuesday、Aril12、2020 AD或14:51:10 CST;

除此之外,使用DateFormat类还可以自定义日期、时间的格式。要定义日期、时间的格式,首先要创建DateFormat类对象,DateFormat类是抽象对象,因此需要使用DateFormat的静态方法getDateInstance()创建DateFormat对象:

DateFormat df = DateFormat.getDateInstance();

(2)实例化DateFormat

DateFormat是一个抽象类,按照以住的思路,直接使用其子类实例化即可。但是DateFormat 类本身的内部提供了可以直接为其实例化的操作。

//得到日期的DateFormat对象: public static final DateFormat getDateInstance(); //得到日期时间的DateFormat对象: public static final DateFormat getDateTimeInstance(); //使用DateFormat类格式化Date类日期 public final String format(Date date)

(3)DateFormat类常用方法

方法返回值功能描述format(Date date)String将一个Date格式化为日期/时间字符串getCalendar()Calendar获取与此日期/时间格式化器相关的日历getDateInstance()Static DateFormat获取日期格式器,该格式化器具有默认语言环境的默认格式化风格getDateTimeInstance()Static DateFormat获取日期/时间格式化器,该格式化器具有默认语言环境的默认格式化风格getInstance()Static DateFormat获取SHORT风格默认日期/时间格式化器getTimeInstance()Static DateFormat获取时间格式化器,该格式化器具有默认语言环境的默认格式化风格parse(String source)Date将字符串拆解成一个日期,并返回这个日期的Date对象

2、SimpleDateFormat类

(1)SimpleDateFormat类概述

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

比如:

import java.util.*; import java.text.*; public class SimpleDateFormatDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub Date dateNow = new Date( ); SimpleDateFormat sft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); System.out.println("当前时间为: " + sft.format(dateNow)); } } Console: 当前时间为: 2020-10-22 03:35:26

代码:SimpleDateFormat sft = **new** SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");确定了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。

⚠️注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。

(2)SimpleDateFormat类的继承关系

(3)日期和时间的格式化编码

时间模式字符串用来指定时间格式。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 被解释为模式字母,即所有所有的 ASCII 字母都被保留,用来表示日期或时间字符串元素。

字母描述表示示例G纪元标记TextADy四位年份Year2001M月份MonthJuly or 07d一个月的日期Number10hA.M./P.M. (1~12)格式小时Number12H一天中的小时 (0~23)Number22m分钟数Number30s秒数Number55S毫秒数Number234E星期几TextTuesdayD一年中的日子Number360F一个月中第几周的周几Number2 (second Wed. in July)w一年中第几周Number40W一个月中第几周Number1aA.M./P.M. 标记TextPMk一天中的小时(1~24)Number24KA.M./P.M. (0~11)格式小时Number10z时区General time zoneEastern Standard TimeZ时区RFC 822 time zone-0800’文字定界符Delimiter"单引号`

3、printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

转 换 符说 明示 例c包括全部日期和时间信息星期六 十月 27 14:21:20 CST 2007F"年-月-日"格式2007-10-27D"月/日/年"格式10/27/07r"HH:MM:SS PM"格式(12时制)02:25:51 下午T"HH:MM:SS"格式(24时制)14:28:16R"HH:MM"格式(24时制)14:28

4、DateFormat 和SimpleDateFormat 的区别

1.DateFormat 可以直接使用,但其本身是一个抽象类,可以根据Locate指定的区域得到对应的日期时间格式

2.SimpleDateFormat 类是DateFormat 类的子类,一般情况下来讲 DateFormat 类很少会直接使用。而都使用SimpleDateFormat 类完成。

5、日期和时间的比较

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

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

6、日期和时间格式化的应用

实例1:美式日期格式

import java.text.DateFormat ; import java.util.Date ; public class DateFormatDemo3 { public static void main(String[] args) { // TODO Auto-generated method stub DateFormat df1 = null ; // 声明一个DateFormat对象 DateFormat df2 = null ; // 再声明一个DateFormat对象 df1 = DateFormat.getDateInstance() ; // 创建日期的DateFormat对象 df2 = DateFormat.getDateTimeInstance() ; // 创建日期时间的DateFormat对象 System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化 System.out.println("DATETIME:" + df2.format(new Date())) ; // 按照日期时间格式化 } } Console: DATE:20201022日 DATETIME:20201022日 下午4:02:07

实例2:中式日期格式

中式日期格式需要通过Locale对象指定要显示的区域,指定的区域是中国

import java.text.DateFormat ; import java.util.Date ; import java.util.Locale ; public class DateFormatDemo4 { public static void main(String[] args) { // TODO Auto-generated method stub DateFormat df1 = null ; DateFormat df2 = null ; df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh","CN")) ; df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN")) ; System.out.println("DATE:" + df1.format(new Date())) ; System.out.println("DATETIME:" + df2.format(new Date())) ; } } DATE:20201022日 DATETIME:20201022日 中国标准时间 下午4:03:24

实例3:格式化当前日期、时间:

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class DateFormatDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub // 创建日期 Date date = new Date(); // 创建不同的日期格式 DateFormat df1 = DateFormat.getInstance(); DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE"); DateFormat df3 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 EE", Locale.CHINA); DateFormat df4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE", Locale.US); DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd"); DateFormat df6 = new SimpleDateFormat("yyyy年MM月dd日"); // 将日期按照不同格式进行输出 System.out.println("-------将日期时间按照不同格式进行输出------"); System.out.println("按照Java默认的日期格式: " + df1.format(date)); System.out.println("按照Java默认的日期格式: " + df1.format(date)); System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE,系统默认区域:" + df2.format(date)); System.out.println("按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE,区域为中国 : " + df3.format(date)); System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss EE,区域为美国: " + df4.format(date)); System.out.println("按照指定格式 yyyy-MM-dd: " + df5.format(date)); System.out.println("按照指定格式 yyyy年MM月dd日: " + df6.format(date)); } } Console: -------将日期时间按照不同格式进行输出------ 按照Java默认的日期格式: 2020/10/22 下午3:32 按照Java默认的日期格式: 2020/10/22 下午3:32 按照指定格式 yyyy-MM-dd hh:mm:ss EE,系统默认区域:2020-10-22 03:32:29 周四 按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE,区域为中国 : 20201022033229秒 周四 按照指定格式 yyyy-MM-dd hh:mm:ss EE,区域为美国: 2020-10-22 03:32:29 Thu 按照指定格式 yyyy-MM-dd: 2020-10-22 按照指定格式 yyyy年MM月dd日: 20201022

实例4:解析字符串为时间

DateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的、DateFormat 对象的格式化存储来解析字符串。例如:

import java.text.*; import java.util.Date; public class DateFormatDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "2020-12-12" : args[0]; System.out.print(input + " 字符提取结果是: "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } } Console: 2020-12-12 字符提取结果是: Sat Dec 12 00:00:00 CST 2020

实例5:使用printf实现日期与时间的格式化

import java.util.Date; public class PrintfDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub Date date = new Date(); System.out.println("1、直接使用编码符号,格式化打印日期和时间:"); System.out.printf("字符c的使用 -- 打印全部日期和时间信息: %tc%n",date); System.out.printf("字符f的使用 -- 年-月-日格式: %tF%n",date); System.out.printf("字符d的使用 -- 月/日/年格式: %tD%n",date); System.out.printf("字符r的使用 -- HH:MM:SS PM格式(12时制): %tr%n",date); System.out.printf("字符t的使用 -- HH:MM:SS格式(24时制): %tT%n",date); System.out.printf("字符R的使用 -- HH:MM格式(24时制): %tR",date); System.out.println("\n \n2、指出要被格式化的参数的索引,对指定索引参数的值进行格式化:"); System.out.printf("%1$s %2$tB %2$td, %2$tY", "索引必须紧跟在%后面,而且必须以$结束 :\nDue date:", date); System.out.println("\n \n3、可以使用 < 标志。它表明先前被格式化的参数要被再次使用:"); System.out.printf("%s %tB %<te, %<tY", "使用 < 标志的结果与指定索引一样 :\nDue date:", date); } } Console: 1、直接使用编码符号,格式化打印日期和时间: 字符c的使用 -- 打印全部日期和时间信息: 周四 1022 18:22:47 CST 2020 字符f的使用 ----日格式: 2020-10-22 字符d的使用 --//年格式: 10/22/20 字符r的使用 -- HH:MM:SS PM格式(12时制): 06:22:47 下午 字符t的使用 -- HH:MM:SS格式(24时制): 18:22:47 字符R的使用 -- HH:MM格式(24时制): 18:22 2、指出要被格式化的参数的索引,对指定索引参数的值进行格式化: 索引必须紧跟在%后面,而且必须以$结束 : Due date: 十月 22, 2020 3、可以使用 < 标志。它表明先前被格式化的参数要被再次使用: 使用 < 标志的结果与指定索引一样 : Due date: 十月 22, 2020

实例5:自定义日期格式转换符

我们可以使用格式化编码自定义日期格式的转换符,这样我门就可以使日期通过指定的转换符生成新字符串。

import java.util.*; public class PrintfDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub Date date=new Date(); //b的使用,月份简称 String str=String.format(Locale.US,"英文月份简称:%tb",date); System.out.println(str); System.out.printf("本地月份简称:%tb%n",date); //B的使用,月份全称 str=String.format(Locale.US,"英文月份全称:%tB",date); System.out.println(str); System.out.printf("本地月份全称:%tB%n",date); //a的使用,星期简称 str=String.format(Locale.US,"英文星期的简称:%ta",date); System.out.println(str); //A的使用,星期全称 System.out.printf("本地星期的简称:%tA%n",date); //C的使用,年前两位 System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date); //y的使用,年后两位 System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date); //j的使用,一年的天数 System.out.printf("一年中的天数(即年的第几天):%tj%n",date); //m的使用,月份 System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date); //d的使用,日(二位,不够补零) System.out.printf("两位数字的日(不足两位前面补0):%td%n",date); //e的使用,日(一位不补零) System.out.printf("月份的日(前面不补0):%te",date); } } Console: 英文月份简称:Oct 本地月份简称:10月 英文月份全称:October 本地月份全称:十月 英文星期的简称:Thu 本地星期的简称:星期四 年的前两位数字(不足两位前面补0):20 年的后两位数字(不足两位前面补0):20 一年中的天数(即年的第几天):296 两位数字的月份(不足两位前面补0):10 两位数字的日(不足两位前面补0):22 月份的日(前面不补0):22

三、小结

最新回复(0)