Java对日期操作的类(Date、SimpleDateFormat、Calendar)

Java对日期操作的类(Date、SimpleDateFormat、Calendar)

一:三大类的基本概念、部分常用方法介绍与举例

Date类

Date:类 Date 表示特定的瞬间,精确到毫秒。用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负。

Date类构造方法 (java.util.Date)

​ Date date1 = new Date(); // 无参构造默认得到的是当前时间的毫秒数
Date date2 = new Date(long类型整数); // 有参构造默认得到的是输入的毫秒数

Date date = new Date();  
System.out.println(date);   // date重写了的toString方法 打印出了时间

Date date1 = new Date(0);  // int 的 0 自动转化成 long 的0
System.out.println(date1); // date重写了的toString方法 打印出了时间
// 系统默认的运行结果格式:
Wed Oct 28 15:40:50 CST 2020
Thu Jan 01 08:00:00 CST 1970

常用方法:

**Long getTime():**获取日期对象毫秒数。毫秒数都是以1970年1月1日0点0分0秒开始计算,值不受setTime()的影响。

**void setTime(Long time):**根据毫秒数设置该日期对象,默认构造函数设置该日期对象为当前日期,date值受setTime()的影响。

		//未setTime()之前
		Date date=new Date();
		long current=date.getTime();
		System.out.println(current);//1472002479966
		System.out.println(date);//Wed Aug 24 09:34:39 CST 2016
		
		//setTime()之后,getTime()未变,date改变
		long time=current+1000*60*60*24;//时间设置为明日此时
		date.setTime(time);
		System.out.println(date.getTime());//1472002479966
		System.out.println(current);//1472002479966
		System.out.println(date);//	Thu Aug 25 09:34:39 CST 2016

SimpleDateFormat类

SimpleDateFormat:继承DateFormat类,根据我们喜欢|习惯的格式将日期在Date和字符串之间转换,从而展示与使用。

构造函数:SimpleDateFormat(String pattern),最常用的构造方法。

常用的俩个格式转换方法:
字符串转换成Date类:Date parse(String date)
Date类转换成字符串类型:String format(Date date)
都是继承自DateFormat类的方法。其中,parse方法会抛出一个转换异常

下面是一个转换的例子:

// 使用SimpleDateFormat格式化工具类,指定格式 
SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// format() 将已有的日期对象格式化为特定的日期字符串
String date1Str = sf.format(date1);  
System.out.println(date1Str);

// parse()把模板对应的格式化日期字符串转化为相应日期时间Date类型
Date date2 = sf.parse("1999/9/9 9:9:9");   
System.out.println(date2);

// 运行结果:
2020/10/28 15:58:41
Thu Sep 09 09:09:09 CST 1999

上面用到的applyPattern方法用来切换需要转换的字符串格式。

Calendar类

(3)Calendar:一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示它是距1970 年 1 月 1 日的 00:00:00的偏移量。

使用Calendar.getInstance获取该对象:Calendar nowTime=Calendar.getInstance();

(1)Date和Calendar之间的转换

//默认创建出来的Calendar的实现类表示当前系统时间
	Calendar c=Calendar.getInstance();
	//将Calendar转换为Date
	Date date=c.getTime();
	
	//Date->Calendar
	/*
	 * void setTime(Date date)
	 * 该方法可以使当前Calendar表示给定的
	 * Date所表示的时间
	 * */
	c.setTime(date);

(3)get(int field)方法:获取时间分量

import java.util.Calendar;
 
/**
 * Calendar提供了获取各个时间分量的值的方法
 * @author zc
 */
public class T05Calendar2 {
	public static void main(String[] args) {
		Calendar c=Calendar.getInstance();
		//获取年
		int year=c.get(Calendar.YEAR);
		System.out.println("year:"+year);//2016
		//获取月:月从0开始!!!,0表示一月
		int month=c.get(Calendar.MONTH);
		System.out.println("month:"+month);//7
		/*
		 * 和天相关的时间分量
		 * DATE,DAY_OF_MONTH:是一致的,表示月中的第几天
		 * DAY_OF_YEAR:表示年中的天
		 * DAY_OF_WEEK:表示周中的天
		 * 
		 * */
		System.out.println(c.get(Calendar.DATE));
		System.out.println(c.get(Calendar.DAY_OF_MONTH));
		System.out.println(c.get(Calendar.DAY_OF_YEAR));
		System.out.println(c.get(Calendar.DAY_OF_WEEK));
		
		int dow=c.get(Calendar.DAY_OF_WEEK)-1;
		
		String[] data={"日","一","二","三","四","五","六"};
		System.out.println("周"+data[dow]);
		
		//获取小时,分钟,秒 	HOUR_OF_DAY:24小时	HOUR:12小时 
		System.out.println(c.get(Calendar.HOUR_OF_DAY));//14
		System.out.println(c.get(Calendar.HOUR));//2
		System.out.println(c.get(Calendar.MINUTE));
		System.out.println(c.get(Calendar.SECOND));
	}
}

(4)set()方法:设置时间分量

/**
 * 设置时间分量,未设置时间分量获取到的是当前的时间信息
 * @author zc
 *
 */
public class T06Calendar3 {
	public static void main(String[] args){
		//表示2008-08-08 20:08:08
		//设置年
		Calendar c=Calendar.getInstance();
		c.set(Calendar.YEAR,2008);
		//设置月,月从0开始
		c.set(Calendar.MONTH,Calendar.AUGUST);
		//设置日
		c.set(Calendar.DATE, 8);
		//设置时
		c.set(Calendar.HOUR_OF_DAY,20);
		//设置分
		c.set(Calendar.SECOND,8);
		//设置秒
		c.set(Calendar.MINUTE,8);
		System.out.println(c.getTime());
		//!!!设置的时间分量超出后,会自行进位
	}
}

(5)add()方法:在当前时间分量基础上修改时间分量

(6)getActualMaximum()方法:获取某个时间分量所允许的最大值

/**
 * 获取某个时间分量所允许的最大值
 * @author zc
 */
public class T07Calendar4 {
	public static void main(String[] args) {
		Calendar c=Calendar.getInstance();
		//查看当月共多少天
		int days=c.getActualMaximum(Calendar.DAY_OF_MONTH);
		System.out.println(days);
		//查看今年多少天
		int doy=c.getActualMaximum(Calendar.DAY_OF_YEAR);
		System.out.println(doy);
		int t=c.getActualMaximum(Calendar.MINUTE);
		System.out.println(t);
	}
}

四、Date、SimpleDateFormat和Calendar的一个综合实例

@Test
	public void test01() throws ParseException{
		//要求用户输入一个日期,计算后,指定格式输出日期
		/*String--SimpleDateFormat()-->Date
		Date-->Calendar
		使用Calendar进行相应计算
		Calendar-->Date
		Date--SimpleDateFormat-->String
		*/
		String input="2013-03-26";
		
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date date=sdf.parse(input);
		Calendar c=Calendar.getInstance();
		//set(),与add()
		c.setTime(date);
		c.add(Calendar.YEAR,1);//在原来年份上加1
		c.set(Calendar.MONTH,0);//重新设定月份为1月
		
		date=c.getTime();
		SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd分hh时ss分mm秒");
		String strTime=sdf2.format(date);
		System.out.println(strTime);
	}
	输出为:
			20140126120000

二:实用
例子中,是通过传入字符串日期来进行计算的,如果能直接接收日期对象就少一个转换的过程

public static void main(String[] args) throws ParseException {
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
		//将日期字符串转换为Date对象
		Date date=(Date)simpleDateFormat.parse("2018-08-05");
		//直接通过Date对象,创建一个日历对象
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		//通过日历中的字段,获取一个月的天数
		Integer daysNumber=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		System.out.println(daysNumber);
	}
	结果:
    31
    30

同理,可以获取一年的天数等。

(4)获取对应日期的星期数

比如2018-08-19是星期天,就输出星期天,20号星期一就输出星期一

public static void main(String[] args) throws ParseException {
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
		//将日期字符串转换为Date对象
		Date date=(Date)simpleDateFormat.parse("2018-08-19");
		//通过Date对象,创建一个日历对象
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		//获取当天对应的星期数,星期天为1,星期六为7,详见Calendar类的常量
		Integer dayOfWeek=calendar.get(Calendar.DAY_OF_WEEK);
		String dayOfWeekStr=null;
		switch(dayOfWeek) {
			case 1:
				dayOfWeekStr="星期天";
				break;
			case 2:
				dayOfWeekStr="星期一";
				break;
			case 3:
				dayOfWeekStr="星期二";
				break;
			case 4:
				dayOfWeekStr="星期三";
				break;
			case 5:
				dayOfWeekStr="星期四";
				break;
			case 6:
				dayOfWeekStr="星期五";
				break;
			case 7:
				dayOfWeekStr="星期六";
				break;
		}
		System.out.println(dayOfWeekStr);
	}
 
    结果:
    星期天

总结:

SimpleDateFormat类用于转换格式,String←→Date;

Date类用于获取毫秒数,或者作为设置Calendar对象日期的参数,分别对应这两个方法date.getTime()、calendar.setTime(date)

Calendar类用于具体操作,比如获取指定年、月的天数,日期对应的星期数,对应的月份数等。
更多Calendar功能请参考:https://blog.csdn.net/qq_23974323/article/details/78712084?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161596227316780274184811%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161596227316780274184811&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-8-78712084.pc_search_result_before_js&utm_term=calendar%E5%8A%9F%E8%83%BD

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值