Java 语言的Calendar,GregorianCalendar (日历),Date(日期)和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。
我们将讨论下面的类:
1、 具体类(和抽象类相对)java.util.Date
2、 抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
3、 抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar(公元日历)
具体类可以被实例化, 但是抽象类却不能。 你首先必须实现抽象类的一个具体子类。
Calendar c = Calendar.getInstance(); 等价于 Calendar gc = new GregorianCalendar();
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat(格式模式字符串);
1、Date及其格式化
Date 类从Java 开发包(JDK) 1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说年、月、日。 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了。这种改进旨在更好的处理日期数据的国际化格式。就在JDK 1.1中一样, Date 类实际上只是一个包裹类,它包含的是一个长整型long数据,表示的是从GMT(格林尼治标准时间)1970年1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年(足够使用)的时间。
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子。这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。
例如要得到今年的年份:date.getYear()+1900或者Calendar.get(Calendar.YEAR)
<span style="font-size:14px;">import java.util.Date;
public class Test_1 {
public static void main(String[] args) {
//当前系统时间,这个构造函数在内部使用了System.currentTimeMillis()方法来从系统获取日期
Date date = new Date();
//返回时间的long类型(毫秒数)
System.out.println("long类型(毫秒数):"+date.getTime());
//Calendar.get(Calendar.YEAR)-1900
System.out.println("年份x-1900:"+date.getYear());
//Calendar.get(Calendarendar.MONTH) <span style="color:#cc33cc;">(0-11)
</span> System.out.println("月份(<span style="color:#cc33cc;">0-11</span>):"+date.getMonth());
//Calendar.get(Calendar.DAY_OF_MONTH)
System.out.println("几号:"+date.getDate());
//Calendar.get(Calendar.DAY_OF_WEEK) <span style="color:#6600cc;"> (1-日,2-周一,3-周二...7-周六)
</span> System.out.println("星期<span style="color:#cc33cc;">(0-日,1-1,2-2...6-6</span>):"+date.getDay());
//Calendar.get(Calendar.HOUR_OF_DAY)
System.out.println("小时(0-23):"+date.getHours());
//Calendar.get(Calendar.MINUTE)
System.out.println("分钟(0-59):"+date.getMinutes());
//Calendar.get(Calendar.SECOND)
System.out.println("秒(0-59):"+date.getSeconds());
}
}</span>
同时,也有与get相应的set方法。
- 将日期格式化为字符串:
Date是一个long类型的数据,而我们想要将其格式化为我们能都读取的日期格式,这里就需要用到SimpleDateFormat了。SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
首先,先实例化一个自定义格式的SimpleDateFormat,例如SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd E”);模式字母参考API文档中SimpleDateFormat。接下来将给定的Date
格式化为日期/时间字符串,sdf.format(new Date()); 即得到 2014-05-13 星期二。
<span style="font-size:14px;color:#ff0000;"> SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E");
System.out.println(sdf.format(new Date()));</span>
- 文本数据解析成日期对象
假设我们有一个已知格式化的日期对象的文本字符串,而我们希望解析这个字符串并从文本日期数据创建一个日期对象。我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleD