Java常用类之Date类、Calendar类

Date类

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

Date类的创建

System 类中的静态方法public static long currentTimeMillis()可以获取系统当前的时间,得到的是从1970年0时0分0秒到目前所走过的毫秒数。可以根据该方法返回的数字用Date类的构造方法Data(long time)创建一个本地日期对象。

//第一个构造函数使用当前日期和时间来初始化对象
Date( );
//第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数(1秒=1000毫秒)
Date(long millisec);
package Liu;
import java.util.Date;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long time = System.currentTimeMillis();
		Date d = new Date(time);
		System.out.println(d);
	}

}
输出
Fri Feb 22 21:33:59 CST 2019
使用 SimpleDateFormat 格式化日期

Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年
如Fri Feb 22 21:33:59 CST 2019
但是我们可能不习惯这种方式,想着按照“年 月 星期 日”或者“年 月 星期 日 小时 分 秒”这种格式
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Date nowTime = new Date();
		System.out.println("当前时间为:" + nowTime.toString());
		SimpleDateFormat matter1 = new SimpleDateFormat("'Beijing Time':yyyy-MM-dd");
		System.out.println("当前时间为:" + matter1.format(nowTime));
		SimpleDateFormat matter2 = new SimpleDateFormat("'Beijing Time':yyyy-MM-dd HH:mm::ss(a)(EE)");
		System.out.println("当前时间为:" + matter2.format(nowTime));
	}

}
输出:
当前时间为:Fri Feb 22 21:50:12 CST 2019
当前时间为:Beijing Time:2019-02-22
当前时间为:Beijing Time:2019-02-22 21:50::12(下午)(星期五)

其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。

使用printf格式化日期

在这里插入图片描述

package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 初始化 Date 对象
	     Date date = new Date();
	 
	     //c的使用  
	    System.out.printf("全部日期和时间信息:%tc%n",date);          
	    //f的使用  
	    System.out.printf("年-月-日格式:%tF%n",date);  
	    //d的使用  
	    System.out.printf("月/日/年格式:%tD%n",date);  
	    //r的使用  
	    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
	    //t的使用  
	    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
	    //R的使用  
	    System.out.printf("HH:MM格式(24时制):%tR%n",date);  
	}

}
全部日期和时间信息:星期五 二月 22 21:53:59 CST 2019
年-月-日格式:2019-02-22
月/日/年格式:02/22/19
HH:MM:SS PM格式(12时制):09:53:59 下午
HH:MM:SS格式(24时制):21:53:59
HH:MM格式(24时制):21:53

Date对象常用的方法
方法名描述
boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
boolean before(Date date)若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Object clone( )返回此对象的副本。
int compareTo(Date date)比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Object obj)若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
boolean equals(Object date)当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
long getTime( )返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
int hashCode( )返回此对象的哈希码值。
void setTime(long time)用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期
String toString( )把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
测量时间
package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
	         long start = System.currentTimeMillis( );
	         System.out.println(new Date( ));
	         Thread.sleep(5*60*10);
	         System.out.println(new Date( ));
	         long end = System.currentTimeMillis( );
	         long diff = end - start;
	         System.out.println("Difference is : " + diff + "毫秒");
	      } catch (Exception e) {
	         System.out.println("Got an exception!");
	      }
	}
}
输出
Fri Feb 22 21:59:40 CST 2019
Fri Feb 22 21:59:43 CST 2019
Difference is : 3015毫秒

Calendar类

Calendar类在java.util包中,其static方法getInstance()可以初始化一个日历对象。Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,
在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

Calendar类的初始化

其static方法getInstance()可以初始化一个日历对象

//默认是当前日期
Calendar c1 = Calendar.getInstance();
//创建一个代表2019年2月22日的Calendar对象
Calendar c2 = Calendar.getInstance();
c2.set(2019, 2, 22);

Calendar类中有很多字段。

filed描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE(Calendar.DAY_OF_MONTH)日期
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK一周之内的星期几
Calendar类对象信息的设置

Calendar类对象信息的设置有Set设置和Add设置。
例如set设置
在这里插入图片描述利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:public void set(int field,int value)

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 1999);
将当前日历对象的年份字段设置为1999年

Add设置

Calendar calendar = Calendar.getInstance();
calendar.add(field, amount);

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);其他字段同理。

Calendar类对象信息的获得

说了这么久,如何获取一个日历对象的信息还不知道怎么做呢,那就是get方法
get(field the given calendar field),返回int类型

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
输出
2019

官方文档解释:get方法Returns the value of the given calendar field. In lenient mode,all calendar fields are normalized.


Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar类

Calendar类实现了公历日历,是一个抽象类,GregorianCalendar是Calendar类的一个具体实现,是Calendar类的一个子类。这里不详细介绍,具体参见GregorianCalendar类的具体描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值