日期处理类
1、Date 日期处理类
日期时重要的程序单元,在Java中如果先获得到当前的日期时间可以直接通过java.lang.Date类来实现,此类的常用操作方法如表1-1所示。
方法 | 类型 | 描述 |
---|---|---|
public Date() | 构造 | 实例化Date类对象 |
public Date(long date) | 构造 | 将数字变为Date类对象,long为日期时间数据 |
public long getTime() | 普通 | 获取日期对象从1970.1.1 00:00:00到现在的毫秒值,类型为long |
public void setTime | 普通 | 设置时间,给的是毫秒值 |
在Date类中提供了两个构造方法,为了清楚这两个类的构造方法的作用,其源码为:
/*
关于Date类的构造方法
*/
public class Date{
//fastTime保存时间戳数据,此数据类型为long
private transient long fastTime; //保存当前日期时间数据
public Date() {
this(System.currentTimeMillis()); //调用单参构造
}
public Date(long date){
fastTime = date;
}
//其他省略,可以参考JDK 1.8源代码
}
通过构造方法我们发现,当调用Date类中无参构造方法时利用System类获取当前日期时间戳而后通过Date类的单参构造方法进行类对象实例化。Date类对象保存当前日期时间依靠的是时间戳数字(此类型为long),Date类也提供有两种数据类型的转换支持。
范例:获取当前日期时间
package edu.blog.test06;
import java.util.Date;
public class DateTestDemo01 {
public static void main(String[] args) {
Date date01 = new Date();
System.out.println(date01);
//Date 与 long 之间转换处理
long currentTime = date01.getTime(); //获取当前时间戳数据
currentTime += 60 * 60 * 24 * 1000 * 10; //10天的毫秒值
System.out.println(new Date(currentTime));
}
}
结果:
Thu Apr 01 14:43:23 CST 2021
Sun Apr 11 14:43:23 CST 2021
本程序利用Date类提供的无参构造实例化了Date类对象,其保存的时间戳是以毫秒的形式记录的当前日期时间,所以本程序中将当前的日期时间戳加上10天的毫秒值就可以获取10天后的日期。
tips:JDK 1.8开始提供有java.time.LocalDateTime类。
2、SimpleDateFormat 日期格式化
为了方便文本显示,Java提供有格式化处理机制。使用java.util.Date类可获得当前的日期时间数据,但是最终的数据显示格式并不方便阅读,那么此时就可以考虑对显示的结果进行格式化处理操作,而这一个操作就需要通过java.text.SimpleDateFormat类完成。该类的继承图如图 2-1所示。
由上图可知,Format是格式化擦操作的父类,其可以实现日期格式化、数字格式化以及文本格式化,而SimpleDateFormat是DateFormat的子类。该类的常用方法如表 2-2所示。
方法 | 类型 | 描述 |
---|---|---|
public SimpleDateFormat() | 构造 | 使用默认模式和日期格式实例化对象 |
public SimpleDateFormat(String pattern) | 构造 | 使用给定的模式和日期格式实例化对象 |
public Date parse(String source) throws ParseException | 普通 | 将字符串转化为日期格式 |
public final String format(Date date) | 普通 | 将日期格式转化为字符串 |
在日期格式化操作中必须设置有完整的日期转化模式,模式中通过特定的日期标记可以将一个日期格式中的日期数字提取出来。如表 2-3所示。
标记 | 描述 |
---|---|
y | 年,年份是4位数,所以需要使用 yyyy 表示年 |
M | 年中的月份,月份是两位数字,所以需要使用 MM 表示月 |
d | 年中的天数,天数是两位数字,所以需要使用 dd 表示日 |
H | 一天中的小时数(24小时),小时数是两位数字,使用 HH 表示小时 |
m | 小时中的分钟数,分钟是两位数字,使用 mm 表示分钟 |
s | 分钟中的秒数,秒是两位数字,使用 ss 表示秒 |
S | 毫秒数,毫秒数是3位数字,使用 SSS 表示毫秒 |
范例1:将日期格式转化为字符串
package edu.blog.test06;
import java.text.SimpleDateFormat;
import java.util.Date;
//将日期格式转化为字符串
public class DateTestDemo02 {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String string = sdf.format(date);
System.out.println(string);
}
}
结果:
2021-04-01 22:24:55:993
本程序通过SimpleDateFormat类依据指定格式将当前的日期时间进行了格式化处理,这样使得信息阅读更加直观。
范例2:将字符串转化为Date对象
package edu.blog.test06;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//将日期格式转化为字符串
public class DateTestDemo03 {
public static void main(String[] args) throws ParseException {
//字符串日期数据
String dateString = "2021-04-01 22:24:55:993";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
//日期字符串格式为Date
Date date = sdf.parse(dateString);
System.out.println(date);
}
}
结果:
Thu Apr 01 22:24:55 CST 2021
本程序需要将字符串格式转化为日期型数据,这样就要要求字符串必须按照给定的转换模式进行定义。
Tips:关于字符串转化为其他数据类型。
在实际项目开发中,经常需要用户进行内容的输入,而对于输入的数据往往都会String进行表示,而经过了一系列学习之后,发现String可以转为任意的基本数据类型,也可以通过SimpleDateFormat类格式化为日期型,这些都属于开发中的常规操作,应该熟练掌握。
注:此文章为个人笔记,如有错误,敬请指正。