JAVA菜鸟入门篇 - Java时间处理类:Date类、DateFormat类和SimpleDateFormat类(二十七)

本文介绍了Java中的Date类,包括其历史、常用方法以及被废弃的特性。接着,详细讨论了DateFormat抽象类和SimpleDateFormat的使用,它们用于字符串和时间对象之间的转换,并展示了如何进行日期格式化和解析。
摘要由CSDN通过智能技术生成

时间处理相关类视图:


从上面可以看出,时间处理类中核心类:java.util.Date 


提醒:java.util.Calendar主要用于日期计算,在进行日期时候,优先考虑。它的一个子类:java.util.GregorianCalendar(阳历)

一.Date类

     Java提供了Date类来处理日期、时间(此处的Date是指java.util包下的Date类,而不是java.sql包下的Date类),这个Date类从JDK1.0起就开始存在了。但正因为它历史悠久,所以它的大部分构造器、方法都已经Deprecated,不再推荐使用了。与日期计算相关的类优先考虑Calendar类。相应API文档(点此

     Date时间类需要导入包:java.util.Date
     在标题Java类库中包含了一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。

     Java中时间是数字表示,是从:标准纪元1970.1.1 0点开始到某一个时间的毫秒数,类型是long.

     Date类中常用的方法有:

       -  Date():生成一个代表当前日期时间的Date对象。该方法在底层调用System.currentTimeMillis()获得long整数作为日期参数。
       -  Date(long date):根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT 1970年1月1日00:00:00之间时间差,以毫秒作为计时单位。
       与Date构造器相同的是,Date对象的大部分方法也被Deprecated了,剩下为数不多的几个方法:
       -  boolean after(Date when):测试该日期是否在指定日期when之后。 
       -  boolean before(Date when):测试该日期是否在指定日期when之前。 
       -  int compareTo(Date anotherDate):比较两个日期的大小,后面的时间大于前面时间。 
       -  boolean equals(Object obj):当两个时间表示同一时刻时返回true。
       -  long getTime():返回该时间对应的long型整数,即从GMT 1970-01-01 00:00:00 到该Date对象之间时间差,以毫秒作为计时单位。 
       -   void setTime(long time):设置该Date对象的时间。


Date类实例讲解:

<span style="font-family:SimSun;font-size:18px;">public class TestDate {
	public static void main(String[] args) {
		Date d = new Date();
		long t = System.currentTimeMillis();
		System.out.println(t);
		Date d2 = new Date(1000);
		
		System.out.println(d2.toGMTString());   //不建议使用
		d2.setTime(24324324);
		System.out.println(d2.getTime());
		System.out.println(d.getTime()<d2.getTime());
					
	}
}
</span>
为什么需要使用toGMTString()方法呢,接下来我们来看看:

<span style="font-family:SimSun;font-size:18px;">Date d2 = new Date(1000);
System.out.println(d2);
System.out.println(d2.toGMTString());   //不建议使用</span>
显示的结果为:

Thu Jan 01 08:00:01 CST 1970
1 Jan 1970 00:00:01 GMT

原因:调用toGMTString()返回的是美国格里高利时间,直接调用d2返回的是北京时间。也就是说美国格里高利与北京时间时差是8个小时。


二.DateFormat和SimpleDateFormat


    DateFormat(API文档)和SimpleDateFormatAPI文档完成字符串和时间对象的转化!DateFormat是一个抽象类,它的实现类SimpleDateFormat。使用DateFormat和SimpleDateFormat需要分别导入包:java.text.DateFormat和java.text.SimpleDateFormat;


    SimpleDateFormat类的继承关系:
java.lang.Object
   |
   +----java.text.Format
           |
           +----java.text.DateFormat
                   |
                   +----java.text.SimpleDateFormat


SimpleDateFormat格式化日期和时间模式字符串如下


常用方法详解:

1.DateFormat的format()方法

 format()方法功能在于按照SimpleDateFormat定义的格式化字符串将时间对象转化成字符串,实例如下:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,属于本年的第w周,属于本月的第W周");
Date d = new Date(123213143235L);
String str = df.format(d);   //将时间对象按照格式化字符串,转化成字符串
System.out.println(str);
显出结果:1973-11-27 09:52:23,属于本年的第48周,属于本月的第5周

2.DateFormat的parse()方法

 parse()方法功能在于将字符串转化为时间对象,字符串表示时间的格式必须与SimpleDateFormat定义的格式一致。否则会抛出异常:java.text.ParseException: Unparseable date: "2015-2,1",在方法中需要捕获异常。实例:

String str2 = "2015-2-1"; 
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd"); //格式化字符串需与待转化的字符串格式保持一致
<span style="white-space:pre">	</span>try {
	<span style="white-space:pre">	</span>Date d2 = df2.parse(str2); 
	<span style="white-space:pre">	</span>System.out.println(d2);
<span style="white-space:pre">	</span>} catch (ParseException e) {
	<span style="white-space:pre">	</span>e.printStackTrace();
<span style="white-space:pre">	</span>}
}
显示结果:Sun Feb 01 00:00:00 CST 2015 

由于没有给出具体的时分秒,系统默认为0

有关DateFormat类的实例:

<span style="font-family:SimSun;">public class TestDateFormat {
	public static void main(String[] args) {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,属于本年的第w周,属于本月的第W周");
		Date d = new Date(123213143235L);
		String str = df.format(d);   //将时间对象按照格式化字符串,转化成字符串
		System.out.println(str);
		System.out.println("####################");
		String str2 = "2015-2-1"; 
		DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd"); //格式化字符串需与待转化的字符串格式保持一致
		try {
			Date d2 = df2.parse(str2); 
			System.out.println(d2);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}</span>

参考:

http://blog.csdn.net/gubaohua/article/details/575488

http://blog.csdn.net/yangshuanbao/article/details/6864054





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值