Java中的日期时间处理及格式化处理

这篇文章主要介绍了Java中的日期时间处理及格式化处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Date类

在java.util.Date包中封装了许多现在的日期和时间,

构造函数:

Date类表示特定的时间,精确到毫秒。在Java1.1之前,Date类中有好几个函数,允许把时间解释成年月日分秒,也允许解析和格式化日期字符串,由于这些函数不能实现国际化,从Java1.1之后,使用 Calendar 类实现日期和时间字段之间转换。

 Date d=new Date();  //使用当前日期和时间来处理
 Date d=new Date(long date);  //以基准时间1970年1月1日经过参数date指定的毫秒数

Date类常用方法:

方法名说明
boolean after(Date date)返回此方法的对象是不是在指定日期之后
boolean before(Date date)返回此方法的对象是不是在指定日期之前
Object clone()返回此对象的副本
int compareTo(Date anotherDate)比较两个指定日期,相等则等于0,调用对象在指定日期之后返回1,否则返回-1.
boolean equals(Object obj)比较两个日期的相等性
String toString()将Date对象以字符串形式输出
long getTime返回从1970年1月1日次Date对象的毫秒数
import java.util.Date;

public class dome2{
 	public static void main(String[] args) {
 	  Date d=new Date(1000000000);
 	  Date d1=new Date();
 	 //d1在d之后
 	  System.out.println(d1.after(d));
 	  //d在d1之前
 	  System.out.println(d.before(d1));
 	  //判断d在d1的什么位置
 	  System.out.println(d.compareTo(d1));
 	  //判断两个对象相等
 	  System.out.println(d.equals(d1));
 	   //获取当前时间的毫秒数
 	 System.out.println(d1.getTime());
	}
}

结果
true
true
-1
false
1629430067783

例1,给定一个266600000的毫秒数,求出这个毫秒数代表几天几时几分几秒。

public class dome2{
 	public static void main(String[] args) {
 	  int date=266600000;
 	  date/=1000;   //毫秒数转化成秒
 	  int  day=date/86400;   //一天有86400秒,计算有多少天
 	  int  hour=date%86400/3600;   //一小时有3600秒,计算有多少个小时
 	  int  minute=date%86400%3600/60;  //一分钟60秒,计算有多少分钟
 	  int  second=date%86400%3600%60;  //计算最后的秒数
 	  System.out.println(day+"天 "+hour+"时 "+minute+"分 "+second+"秒");
 	  
	}
}

结果
3天 2时 3分 20秒

Calendar 类

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。Calendar类不能使用new关键字,它提供了一个 getInstance() 方法来获得Calendar类的对象。

Calendar c=Calendar.getInstance(); //获得对象

Calendar 类常用方法:

方法名说明
void add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量。1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作
boolean after()Calendar表示的时间是否在指定的时间之后。
boolean before()Calendar表示的时间是否在指定的时间之前。
Date getTime()返回此calendar时间值的date对象
long getTimeInMillis()返回Calendar的时间值
void clear()清空Calendar类的日期和时间
Object clone()创建并返回一个副本
int compareTo(Calendar anotherCalendar)比较两个Calendar类的时间值,大则返回1,小则返回-1,否则返回0
int get(int field)返回指定日历的时间
int getFirstDayOfWeek()获取一周的第一天,在美国,第一天是sunday,而在法国则monday。
static Calendar getInstance()使用默认时区和语言获得一个日历
int getActualMaximum(int field)返回指定日历字段的最大值
int getActualMinimum(int field)返回指定日历字段的最小值
void set(int field, int value)为指定的日历字段设定指定值
void set(int year, int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute)设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
void setFirstDayOfWeek(int value)设置一个星期的第一天是哪天
void setTimeInMillis(long millis)利用给定long值设置此时calendar的当前时间

Calendar字段:

Calendar类可以通过get方法获取很多有关时间的值,在Calendar中定义了许多字段,也就是常量,不同的常量代表不同的时间名。

字段名说明
YEAR年份
MONTH月份,0代表1一月份,11代表12月份
DATE日期,一个月中的几号
DAY_OF_MONTH与DATE相同,日期
HOUR十二小时制的几时
HOUR_OF_DAY24小时制的几时
MINUTE分钟
SECOND
DAY_OF_WEEK一个星期的哪天,星期几
AM_PM返回小时是在中午之前还是在中午之后,1代表下午,0代表上午
DAY_OF_YEAR返回当前年中的第多少天
WEEK_OF_YEAR一年当中的第几个星期
WEEK_OF_MONTH一个月中的第几个星期

Calendar类返回实例:

import java.util.Calendar;

public class dome2{
 	public static void main(String[] args) {
        Calendar c=Calendar.getInstance();
        System.out.println("返回当前时间:"+c.getTime());
        System.out.println("返回当前年份:"+c.get(Calendar.YEAR));
        System.out.println("返回当前月份:"+(c.get(Calendar.MONTH)+1));
        System.out.println("返回当前的日"+c.get(Calendar.DATE));
        System.out.println("返回当前星期几:"+(c.get(Calendar.DAY_OF_WEEK)-1));
        System.out.println("返回当前是一年中的第几天:"+c.get(Calendar.DAY_OF_YEAR));
        System.out.println("返回当前是一年中的第几个星期:"+c.get(Calendar.WEEK_OF_YEAR));
        System.out.println("返回当前是一个月中的第几个星期:"+c.get(Calendar.WEEK_OF_MONTH));
        System.out.println("返回当前的小时(十二小时制):"+c.get(Calendar.HOUR));
        System.out.println("返回当前的小时(二十四小时制):"+c.get(Calendar.HOUR_OF_DAY));
        System.out.println("返回当前是时间是多少分:"+c.get(Calendar.MINUTE));
        System.out.println("返回当前时间的秒:"+c.get(Calendar.SECOND));
	}
}

例子:

public class dome2{
 	public static void main(String[] args) {
         Calendar c=Calendar.getInstance();
         c.set(2020,3,1,15,5,23);
         Date date=c.getTime();
         System.out.println(date);
         StringBuffer str=new StringBuffer();
         str.append(c.get(Calendar.YEAR)+"年");
         str.append(c.get(Calendar.MONTH)+"月");   //设定的月份不用加1
         str.append(c.get(Calendar.DATE)+"日");
         str.append(c.get(Calendar.HOUR)+"时");
         str.append(c.get(Calendar.MINUTE)+"分");
         str.append(c.get(Calendar.SECOND)+"秒");
         System.out.println(str.toString());
	}
}

结果
Wed Apr 01 15:05:23 CST 2020
2020年3月1日3时5分23秒

DateFormat 类

  • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
  • DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
  • DateFormat 不能使用new关键字。要使用 DateFormat 类的getDateInstance()方法来创建对象。
DateFormat d=DateFormat.getInstance();  //创建对象

在DateFormat对象中使用方法来对时间和日期进行格式化,见图。

方法名说明
String format(Date date)将Date的日期和时间格式化成字符串
Calendar getCalendar()返回当前时间日期相关的日历
static DateFormat getDateInstance()返回默认语言格式化的日期,例如几年几月几号
static DateFormat getDateInstance(int style)获取指定的格式化日期的日历,datestyle中:FULL表示几年几月几号星期几,MEDIUM和LONG表示几年几月几日,SHORT表示Y/M/D
static DateFormat getDateInstance(int style,Locale locale)获取指定日期格式化风格和语言环境的日历
static DateFormat getDateTimeInstance()获取默认格式化风格和语言环境的日期时间格式,如几年几月几日上午或上午hh:mm:ss
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle)获取指定格式化风格和语言环境的时间日期格式,timeStyle中:FULL表示中国标准时间 上午还是下午hh:mm:ss;SHORT和MEDIUM表示上午或下午hh:mm:ss;LONG表示CST 上午或下午hh:mm:ss
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale)获取指定日期时间格式风格和语言环境的日历
static DateFormat getTimeInstance()获取默认格式化风格和语言环境的时间格式
static DateFormat getTimeInstance(int style)获取指定格式化风格和默认语言环境的时间格式,参照上面第七个的timeStyle格式方式
static DateFormat getTimeInstance(int style,Locale locale)获取指定格式化风格和指定语言环境的时间格式
Date parse(String source)将字符串解析成日期/时间

例子:

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class dome2{
 	public static void main(String[] args) {
         DateFormat d=DateFormat.getInstance();
         //创建指定日期格式和中国语言环境的日期格式
         DateFormat d1=d.getDateInstance(DateFormat.FULL,Locale.CHINA);
         DateFormat d2=d.getDateInstance(DateFormat.LONG,Locale.CHINA);
         DateFormat d3=d.getDateInstance(DateFormat.SHORT,Locale.CHINA);
         DateFormat d4=d.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
         //创建指定时间格式和中国语言环境的时间格式
         DateFormat d5=d.getTimeInstance(DateFormat.FULL,Locale.CHINA);
         DateFormat d6=d.getTimeInstance(DateFormat.LONG,Locale.CHINA);
         DateFormat d7=d.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
         DateFormat d8=d.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
         //返回指定风格和语言环境的日期
         String s1=d1.format(new Date());
         String s2=d2.format(new Date());
         String s3=d3.format(new Date());
         String s4=d4.format(new Date());
         //返回指定风格和中国语言环境的时间
         String s5=d5.format(new Date());
         String s6=d6.format(new Date());
         String s7=d7.format(new Date());
         String s8=d8.format(new Date());
         System.out.println("FULL的是:"+s1+"\t"+s5);
         System.out.println("LONG的是:"+s2+"\t"+s6);
         System.out.println("SHORT的是:"+s3+"\t"+s7);
         System.out.println("MEDIUM的是:"+s4+"\t"+s8);
 	}
}

结果
FULL的是:2021年8月21日星期六 中国标准时间 下午8:49:44
LONG的是:2021年8月21日 CST 下午8:49:44
SHORT的是:2021/8/21 下午8:49
MEDIUM的是:2021年8月21日 下午8:49:44

SimpleDateFormat 类

在使用DateFormat 类时,只有固定格式,在java.text.SimpleDateFormat包有一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。

SimpleDateFormat 类基本构造方法:

SimpleDateFormat 类是DateFormat 类的一个子类。

  • new SimpleDateFormat();默认模式和默认日期格式符号创造。
  • SimpleDateFormat(String pattern);使用指定的模式和默认日期格式符号创造。
  • SimpleDateFormat(String pattern, Locale locale);使用指定的模式和指定语言环境的默认日期符号构造。

DateFormat 也可以new SimpleDateFormat对象。有些方法还是建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来创建日期-时间格式器。

DateFormat d=new SimpleDateFormat();

代表日期和时间的模式元素字母:

字母含义示例
y年,一个y代表一位"yyy"代表019,"yyyy"代表2019
M月份例如八月,M代表8,MM代表08
w一年中的第几周常用ww表示
W一个月中的第几周常用WW表示
d一个月中的第几天常用dd表示
D一年中的第几天常用DDD表示
E星期几,用E表示星期,根据不同语言环境返回CHINA表示星期几,US表示英文缩写
a上午或下午am代表上午,pm代表下午
H一天中的小时数,二十四小时制常用HH表示
h一天中的小时数,十二小时制常用hh表示
m分钟数常用mm表示
s秒数常用ss表示
S毫秒数常用SSS表示

返回当前的时间

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

public class dome2{
 	public static void main(String[] args) {
 		DateFormat d=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒SSS毫秒");
 		System.out.println(d.format(new Date()));
 	}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。

本文标题为:Java中的日期时间处理及格式化处理