日期基本概述
有关时间的操作中,最常用的就是将时间转化为特定的的格式,如XXXX年XX月XX日,或者是XXXX-XX-XX的格式,或者将字符串转化为日期类型。其中最常用的就是java.text包中的DateFormat类以及DateFormat的子类SimpleDateFormat这两个类以及Calendar类,同时还有java.sql.Date等类主要用于处理数据库中的日期类型的。下面将会分别的,简要的介绍一下每个类的用法。
DateFormat
该类是专门用于时间格式化的。该类在API文档中的定义为:
public abstract class DateFormat extends Format
说明了该类是一个抽象类,根据JAVA的语法规则,只能够使用此类的子类。但是DateFormat提供了2个方法可以将自身实例化的操作
得到时间的日期: static DateFormat getInstance()
得到时间的具体的日期static DateFormat getDateTimeInstance()
具体的用法如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class LearnDateFormat {
public static void main(String[] args) {
DateFormat df1 = null;
df1 = DateFormat.getDateInstance();
System.out.println("DATE:"+df1.format(new Date())); //得到日期
DateFormat df2 = null;
df2 = DateFormat.getDateTimeInstance();
System.out.println("DATE:"+df2.format(new Date())); //得到日期和时间
}
}
最后的输出结果为:
DATE:2014-5-13 16:26:12
DATE:2014-5-13
通过输出,就可以查出getDateInstance()和getDateTimeInstance()方法的区别了。一个只能够得到当前的日期,而另一个可以得到当前的精确的时间。
SimpleDateFormat
在实际的编码过程中,DateFormat并不经常用,用的更多的是SimpleDateFormat。此类是DateFormat的子类。此类的主要作用是
完成日期的显示格式化的。例如,在开发中将一种日期个是转化成另外一种。同时该类还从父类中继承了parse()的方法,主要是用来将一个字符串转化为一个日期类型。如下:
原始格式:2014-05-1311:15:30.478
转换格式为:2014年5月13日 11点15分30秒478毫秒。
在SimpleDateFormat中,有几个比较重要且经常使用的方法。
构造方法: SimpleDateFormat(String pattern)
在使用SimpleDateFormat类的时候,在构造方法中必须传入要匹配的模板,否则无法完成日期的转化。
转换: Date parse(String source)throws ParseException (将String转换为Date)
格式化:String Format(Date date) (将Date转化为指定格式的字符串)
具体的使用方法为:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class LearnDateFormat {
public static void main(String[] args) {
String datestr = "2014/5/13 14:22:30.456"; //带转化的字符串
String pattern1= "yyyy/MM/dd HH:mm:ss.SSS";
//设定需要匹配模式,将datestr转换hauntedDate,这种格式一定要与datestr的格式一样,否否则无法转化
SimpleDateFormat sdf1 = new SimpleDateFormat(pattern1);
Date date = null;
try {
date = sdf1.parse(datestr); //将datestr转化为指定的格式
} catch (ParseException e) {
//假设pattern不是之前的格式,而是 "yyyy-MM-dd HH:mm:ss.SS"由于无法转化,则会报错
e.printStackTrace();
}
String pattern2 = "yyyy年MM月dd日HH时mm分ss秒SS毫秒";
//将date格式化为String,形式为2014年5月13好14时22分30秒456毫秒
SimpleDateFormat sdf2 = new SimpleDateFormat(pattern2);
String datestr2 = sdf2.format(date);
System.out.println(datestr2);
}
}
最后的输出结果为:
2014年05月13日14时22分30秒456毫秒
pattern1的格式必须和需要转化的日期的字符串保持一致,否则就不能将datestr转化为Date类型的。记住这一点非常的重要。
parse()方法主要就是用于将datestr转化为Date类型,而转化所采用的匹配原则就是SimpleDateFormat定义的匹配原则
format就是将一个Date类型的对象转化为指定格式的string类型的变量,如在实例中将Date转化为yyyy年MM月dd日HH时mm分ss秒SS毫秒的格式,此格式也需要使用匹配规则来进行定义。
Calendar
此类主要是用来获得日期中的具体的时间。由于在Date中的getDate()和getDay()、getMonth()等已经被弃用了,API文中中建议使用Calendar来获得日期对象的具体的时间。此类在JAVA的API的文档中的定义是,
public abstract class Calendar extends Object
说明此类是一个抽象类,但是提供了一个实例化的方法。通过方法getInstance()就可以得到实例化的对象。
具体的使用方法如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class LearnDateFormat {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.toLocaleString());
Calendar c = Calendar.getInstance();
c.setTime(date);
//得到日期的年份
System.out.println(c.get(Calendar.YEAR));
//得到当前的月份,默认是从0开始计算
System.out.println(c.get(Calendar.MONTH));
//得到当前的是本月的第多少天
System.out.println(c.get(Calendar.DAY_OF_MONTH));
//得到当前是本月的第多少个星期
System.out.println(c.get(Calendar.WEEK_OF_MONTH));
//得到当前是这个星期的第几天,(默认周日是第一天)
System.out.println(c.get(Calendar.DAY_OF_WEEK));
}
}
在Calendar中还有许多其他的类似的方法,可以查阅API文档来了解其他的方法。本文就不一一进行说明了。所以如果是要获得Date对象中的具体的时间方法,就必须使用到Calendar类了。
总结与时间有关的类
在JAVA的API文档中有许多与时间有关的类,在这里只是简单的说明一下他们之间的基本用途,给自己做一下笔记。方便自己要有的时候查询。
Java.util.Date是一个单独的类,其中java.sql.Date和java.sql.Time和java.sql.Timestamp分别继承Date类,java.sql.Date继承了java.util.Date中的日期部分,java.sql.Time继承了java.util.Date中的时间部分,而java.sql.Timesatmp同时继承了java.util.Date中的时间和日期部分。同时这三个类主要适合数据库中的日期处理有关的类。
Java.text.DateFormat主要是用于日期的格式化。其中比较常用的是该类的子类java.text.SimpleDateFormat类.(在上面的介绍中已经讲解的很清楚了)
Java.util.Calendar主要是用来得到日期中的具体的时间,如月份,星期,年份,分钟等等。Java.util.GregorianCalendar是该类的子类,主要是用来处理各种各样的时区。