最近在复习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类。