Date 类从Java 开拓包(JDK) 1.0 就开始进化, 其时它只包括了几个取得可能配置一个日期数据的各个部门的要领, 好比说月, 日, 和年。这些要领此刻遭到了品评而且已经被转移到了Calendar类里去了, 我们将在本文中进一步接头它。
这种改造旨在更好的处理惩罚日期数据的国际化名目. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包括的是一个长整型数据, 暗示的是从GMT(格林尼治尺度时间)1970年, 1 月 1日00:00:00这一刻之前可能是之后经验的毫秒数。
建设一个日期工具
让我们看一个利用系统的当前日期和时间建设一个日期工具并返回一个长整数的简朴例子. 这个时间凡是被称为Java 虚拟机(JVM)主机情况的系统时间.
import java.util.Date;
public class DateExample1 {
public static void main(String[] args) { //本身替换[]
// Get the system date/time
Date date = new Date();
System.out.println(date.getTime());
}
}
在礼拜六, 2001年9月29日, 下午约莫是6:50的样子,上面的例子在系统输出设备上显示的功效是 1001803809710. 在这个例子中,值得留意的是我们利用了Date 结构函数建设一个日期工具,这个结构函数没有接管任何参数. 而这个结构函数在内部利用了System.currentTimeMillis() 要领来从系统获取日期。
那么, 此刻我们已经知道了如何获取从1970年1月1日开始经验的毫秒数了. 我们如何才气以一种用户大白的名目来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.
日期数据的定制名目
如果我们但愿定制日期数据的名目, 例如礼拜六-9月-29日-2001年. 下面的例子展示了如何完成这个事情:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample2 {
public static void main(String[] args) { //本身替换[]
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
}
}
只要通过向SimpleDateFormat 的结构函数通报名目字符串"EEE-MMMM-dd-yyyy", 我们就可以或许指明本身想要的名目. 你应该可以瞥见, 名目字符串中的ASCII 字符汇报名目化函数下面显示日期数据的哪一个部门. EEEE是礼拜, MMMM是月, dd是日, yyyy是年. 字符的个数抉择了日期是如何名目化的.通报"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期名目化选项的完整的指示.
将文本数据理会成日期工具
假设我们有一个文本字符串包括了一个名目化了的日期工具, 而我们但愿理会这个字符串并从文今日期数据建设一个日期工具. 我们将再次以名目化字符串"MM-dd-yyyy" 挪用SimpleDateFormat类, 可是这一次, 我们利用名目化理会而不是生成一个文今日期数据. 我们的例子, 显示在下面, 将理会文本字符串"9-29-2001"并建设一个值为001736000000 的日期工具.
例子措施:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample3 {
public static void main(String[]args) { //本身替换[]
// Create a date formatter that can parse dates of
// the form MM-dd-yyyy.
SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
// Create a string containing a text date to be parsed.
String dateStringToParse = "9-29-2001";
try {
// Parse the text version of the date.
// We have to perform the parse method in a
// try-catch construct in case dateStringToParse
// does not contain a date in the format we are expecting.
Date date = bartDateFormat.parse(dateStringToParse);
// Now send the parsed date as a long value
// to the system output.
System.out.println(date.getTime());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
利用尺度的日期名目化进程
既然我们已经可以生成息争析定制的日期名目了, 让我们来看一看如何利用内建的名目化进程. 要领 DateFormat.getDateTimeInstance() 让我们得以用几种差异的要领得到尺度的日期名目化进程. 在下面的例子中, 我们获取了四个内建的日期名目化进程. 它们包罗一个短的, 中等的, 长的, 和完整的日期名目.
import java.text.DateFormat;
import java.util.Date;
public class DateExample4 {
public static void main(String[] args) { //本身替换[]
Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
}
#p#分页标题#e#
留意我们在对 getDateTimeInstance的每次挪用中都通报了两个值. 第一个参数是日期气势气魄, 而第二个参数是时间气势气魄. 它们都是根基数据范例int(整型). 思量到可读性, 我们利用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期名目化进程的更多的要领和选项, 请看Sun 公司Web 站点上的表明.
运行我们的例子措施的时候, 它将向尺度输出设备输出下面的内容:
9/29/01 8:44 PM
Sep 29, 2001 8:44:45 PM
September 29, 2001 8:44:45 PM EDT
Saturday, September 29, 2001 8:44:45 PM EDT