[Java]常用日期处理

最近在复习Java基础,发现Java中关于日期处理的类比较杂乱,新手常常无法找到合适的方法。于是决定写一篇博文介绍一下Java常用的日期处理。

Java中常用的日期相关类以及它们之间的关系如下图所示,其中中间的Date是指java.util.Date,左下的Date指java.sql.Date。这几个类几乎包含了所有常用日期处理的方法,下边将分别详细介绍一下它们。


1.Date(java.util.Date)

Date类应该是Java中最早用于日期处理的类了,它的无参构造函数可以创建一个表示当前时间的对象,其他构造函数还支持通过将int类型的年月日或String类型的日期构造成日期对象,如下面代码所示:

//通过默认构造函数创建当前时间对象
Date d = new Date();
//通过int类型的年月日创建对象
Date d = new Date(2014, 7, 30);
//通过String类型的日期创建对象
Date d = new Date("Sat 30 Oct 2014 14:59:00");
不过很遗憾的是,下面两种方法都在Java1.1版本被Calendar的set方法和DateFormat的parse方法所替代了,并且Date类中的所有的日期修改方法也被Calendar中的对应方法所替代,这说明Date类将不再用于日期修改,仅作为一个封装日期数据的类所提供。


2.Date(java.sql.Date)、Time和Timestamp

这三个Date类的子类在数据库操作中经常会碰到,分别被用来表示日期(年月日)、时间(时分秒)以及日期时间(年月日时分秒)。它们的作用一般用于保存从数据库中取出的日期数据,在此不多做介绍了。


3.Calendar

由于Date类对国际化支持的并不好,在Java1.1版本中推出了Calendar类,中文翻译就是日历的意思。Calendar是一个抽象类,我们需要使用它的静态方法getInstance获得一个表示当前时间的其实现类的实例,如下面代码所示:

//通过getInstance获得Calendar实例
Calendar rightNow = Calendar.getInstance();
Calendar类用于日期处理提供了相当多的方法和静态变量,它的get和set方法需要通过字段设置和取出对应的值,如:

//通过set方法设置需要的时间
rightNow.set(Calendar.HOUR_OF_DAY, 15);
//通过get方法获得设置的时间
int nowHour = rightNow.get(Calendar.HOUR_OF_DAY);
此外Calendar还提供对时间进行加减的方法add,如:

//在当前时间的基础上增加15分钟
rightNow.add(Calendar.MINUTE, 15);
Calendar还有许多其它可以对日期进行修改的函数,可以查询API文档,本文就不一一详述了。


4.DateFormat

DateFormat类是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。在实际使用中我们通常使用它的子类SimpleDateFormat。

SimpleDateFormat的构造函数可以指定一个日期格式,然后按照这个日期格式去解析或输出日期对象,如:

//创建一个SimpleDateFormat对象,指定日期格式为年-月-日。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//解析日期
Date d = sdf.parse("2014-8-30");
//创建另一个SimpleDateFormat,指定格式为xxxx年xx月xx日。
sdf = new SimpleDateFormat("yyyy年MM月dd日");
//转换日期
String s = sdf.format(d);

4.其他

TimeZone类表示时区偏移量,由于使用较少本文就不详细说明了,有兴趣可以查询API文档。

System类有个currentTimeMillis方法,可以返回以毫秒为单位的当前时间,一般用于计算程序时间差。


5.总结

需要保存日期时可以使用java.util.Date类以及它的子类Java.sql.Date类、Time类和Timestamp类。

需要更改日期时,推荐使用Calendar类。

需要格式化解析或输出日期时,推荐使用SimpleDateFormat类。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。