Java中的日期时间处理及格式化处理
目录
- Date类
- Calendar 类
- DateFormat 类
- SimpleDateFormat 类
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_DAY | 24小时制的几时 |
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())); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。