关于日期操作的类Date, DateFormat, SimpleDateFormat

Date  类
java.util 包里面的 Date 类,是 Java 里面进行日期操作常用类。Date 类用来表示特定
的瞬间,精确到毫秒,以表示自从标准基准时间(称为“历元(epoch)“,即 1970 年 1 月 1 日
00:00:00 格林威治时间)以来的指定毫秒数。
初始化 Date
Date 的构造方法:
public Date( )
分配 Date 对象并初始化此对象,以表示分配它的时候的当前时间(精确到毫秒)。使用
Date 类得到当前的时间。
public Date(long date)
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch) “,即 1970
年 1 月 1 日 00:00:00 格林威治时间)以来的指定毫秒数。
一些常用方法:
public boolean after(Date when)
测试此日期是否在指定日期之后
public boolean before(Date when)
测试此日期是否在指定日期之前方法:getTime()返回自 1970年 1月1 日00:00:00 GMT
以来此 Date 对象表示的毫秒数。
示例
简单的性能测试——监控一段代码运行所需要的时间
public class Test {
public static void main(String args[]) {
long d1 = new Date().getTime();// 得到此时的时间
int sum = 0;
for (int i = 1; i <= 1000000; i++) {// 一百万次
sum += i;
}
System.out.println("从 1 加到 1000000 的和=" + sum);
long d2 = new Date().getTime();// 得到此时的时间
System.out.println("从 1 加到 1000000 所耗费的时间是=" + (d2 - d1) + "
毫秒");
}
}
运行结果:
从 1 加到 1000000 的和=1784293664
从 1 加到 1000000 所耗费的时间是=20 毫秒。
DateFormat  类和 SimpleDateFormat  类
Date 对象表示时间的默认顺序是星期、月、日、小时、秒、年,例如
Wed May 12 14:33:11 CST 2009
我们可能希望按照某种习惯来输出时间,比如时间的顺序:年、月、星期、日。可以使用
java.text 包中的 DateFormat 类,是日期/时间格式化子类的抽象类,它以与语言无关的
方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式
化(也就是日期转换成文本)、解析(文本转换成日期)和标准化。
由于 DateFormat 是个抽象类,SimpleDateFormat 类是它的子类,所以下面就主要按照
SimpleDateFormat 类来讲解。
 如何初始化
构造方法:SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
日期和时间模式
日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的
字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元
素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均
不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
常用方法
public Date parse(String source)
【解析】
从给定字符串的开始解析文本,以生成一个日期。
public String format(Date date)
【格式化】
将一个 Date 格式化为日期/时间字符串。
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date d = new Date();
// 把当前时间转换成为我们熟悉的时间表达格式
String str = df.format(d);
System.out.println("当前时间是:" + str);
// 然后再把字符串格式的日期转换成为一个Date类
try {
Date d2 = df.parse("2012-07-27 08:08:08 888");
System.out.println("伦敦奥运会开幕时间是:" + d2.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
运行结果:
当前时间是:2009-05-17 18:52:13 437
伦敦奥运会开幕时间是:1343347688888
也可以采用 System 类的静态方法 public long currentTimeMillis()获取系统当前
时间的毫秒数。
虽然 JDK 文档上说 Date 的毫秒值,是相对于格林威治时间 1970 年 1 月 1 号的 0
点,但实际测试,这个 Date 是跟时区相关的,也就是说在中国测试这个基准值应该是 1970 年
1 月 1 日的 8 点,不过这个不影响我们的处理,因为只要是同一个基准时间就可以了,而不用关
心具体是多少
public class Test {
public static void main(String args[]) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date d = new Date(0L);// 把时间设为 0,表示到基准时间
// 然后转换成为字符串看看是什么时候
String str = df.format(d);
System.out.println("基准时间是:" + str);
}
}
运行结果:
基准时间是:1970-01-01 08:00:00 000

猜你喜欢

转载自blog.csdn.net/Nice118/article/details/81459526