Date 类从Java 开发包(JDK) 就开始进化 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法 比如说月 日 和年 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了 我们将在本文中进一步讨论它
这种改进旨在更好的处理日期数据的国际化格式 就象在JDK 中一样 Date 类实际上只是一个包裹类 它包含的是一个长整型数据 表示的是从GMT(格林尼治标准时间)年 月 日::这一刻之前或者是之后经历的毫秒数
创建一个日期对象
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间
import javautilDate;
public class DateExample {
public static void main(String[] args) { //自己替换[]
// Get the system date/time
Date date = new Date();
Systemoutprintln(dategetTime());
}
}
在星期六 年月日 下午大约是:的样子 上面的例子在系统输出设备上显示的结果是 在这个例子中值得注意的是我们使用了Date 构造函数创建一个日期对象 这个构造函数没有接受任何参数 而这个构造函数在内部使用了SystemcurrentTimeMillis() 方法来从系统获取日期
那么 现在我们已经知道了如何获取从年月日开始经历的毫秒数了 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类javatextSimpleDateFormat 和它的抽象基类 javatextDateFormat 就派得上用场了
日期数据的定制格式
假如我们希望定制日期数据的格式 比方星期六月日年 下面的例子展示了如何完成这个工作:
import javatextSimpleDateFormat;
import javautilDate;
public class DateExample {
public static void main(String[] args) { //自己替换[]
SimpleDateFormat bartDateFormat =
new SimpleDateFormat(EEEEMMMMddyyyy);
Date date = new Date();
Systemoutprintln(bartDateFormatformat(date));
}
}
只要通过向SimpleDateFormat 的构造函数传递格式字符串EEEMMMMddyyyy 我们就能够指明自己想要的格式 你应该可以看见 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分 EEEE是星期 MMMM是月 dd是日 yyyy是年 字符的个数决定了日期是如何格式化的传递EEMMddyy会显示 Sat 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示
将文本数据解析成日期对象
假设我们有一个文本字符串包含了一个格式化了的日期对象 而我们希望解析这个字符串并从文本日期数据创建一个日期对象 我们将再次以格式化字符串MMddyyyy 调用SimpleDateFormat类 但是这一次 我们使用格式化解析而不是生成一个文本日期数据 我们的例子 显示在下面 将解析文本字符串并创建一个值为 的日期对象
例子程序:
import javatextSimpleDateFormat;
import javautilDate;
public class DateExample {
public static void main(String[]args) { //自己替换[]
// Create a date formatter that can parse dates of
// the form MMddyyyy
SimpleDateFormat bartDateFormat =
new SimpleDateFormat(MMddyyyy);
// Create a string containing a text date to be parsed
String dateStringToParse = ;
try {
// Parse the text version of the date
// We have to perform the parse method in a
// trycatch construct in case dateStringToParse
// does not contain a date in the format we are expecting
Date date = bartDateFormatparse(dateStringToParse);
// Now send the parsed date as a long value
// to the system output
Systemoutprintln(dategetTime());
}
catch (Exception ex) {
Systemoutprintln(exgetMessage());
}
}
}
使用标准的日期格式化过程
既然我们已经可以生成和解析定制的日期格式了 让我们来看一看如何使用内建的格式化过程 方法 DateFormatgetDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程 在下面的例子中 我们获取了四个内建的日期格式化过程 它们包括一个短的 中等的 长的 和完整的日期格式
import javatextDateFormat;
import javautilDate;
public class DateExample {
public static void main(String[] args) { //自己替换[]
Date date = new Date();
DateFormat shortDateFormat =
DateFormatgetDateTimeInstance(
DateFormatSHORT
DateFormatSHORT);
DateFormat mediumDateFormat =
DateFormatgetDateTimeInstance(
DateFormatMEDIUM
DateFormatMEDIUM);
DateFormat longDateFormat =
DateFormatgetDateTimeInstance(
DateFormatLONG
DateFormatLONG);
DateFormat fullDateFormat =
DateFormatgetDateTimeInstance(
DateFormatFULL
DateFormatFULL);
Systemoutprintln(shortDateFormatformat(date));
Systemoutprintln(mediumDateFormatformat(date));
Systemoutprintln(longDateFormatformat(date));
Systemoutprintln(fullDateFormatformat(date));
}
}
注意我们在对 getDateTimeInstance的每次调用中都传递了两个值 第一个参数是日期风格 而第二个参数是时间风格 它们都是基本数据类型int(整型) 考虑到可读性 我们使用了DateFormat 类提供的常量: SHORT MEDIUM LONG 和 FULL 要知道获取时间和日期格式化过程的更多的方法和选项 请看Sun 公司Web 站点上的解释
运行我们的例子程序的时候 它将向标准输出设备输出下面的内容:
// : PM
Sep :: PM
September :: PM EDT
Saturday September :: PM EDT