java 日期相关Date、SimpleDateFormat、Calendar区分和使用

一、Date类

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

Date类中很多方法已经过时,使用Calendar来替代。

常用方法有

long getTime()

void setTime(long time)

public class T01Date {
	public static void main(String[] args) {
		//getTime():返回的时间是距离1970年的毫秒数.值不受setTime()的影响
		//date值受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
		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根据特定的日期格式在Date和字符串之间转换

常用方法

String format(Date date):将日期按照指定格式转换成字符串

Date parse(String str):将字符串按照指定格式转换成Date

可以用来指定格式的字符


/**
 * java.text.SimpleDateFormat
 * 该类可以根据一个指定的日期格式将Date于String
 * 之间相互转换
 * @author zc
 *
 */
public class T02SimpleDateFormat {
	public static void main(String[] args) throws ParseException {
		Date now =new Date();
		//2016-08-12 09:55:23
		//yyyy-MM-dd hh:ss:mm
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh时ss分mm秒");
		String str = sdf.format(now);
		System.out.println(str);
		
		//a 居然能区分上下午汉字
		String strDate="2012年12月20日下午12点20分30秒";
		SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日ahh点ss分mm秒");
		Date date=sdf2.parse(strDate);
		System.out.println(date);
		
	}
}
三、Calendar
java.util.Calendar是抽象类,主要用来对时间分量进行计算。

常用方法

(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);
	}
}

(2)getInstance()方法

Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()用来获取Calendar类型的实例

(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);
		c.set(Calendar.MONTH,0);
		c.set(Calendar.DAY_OF_WEEK,1);
		
		date=c.getTime();
		SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd分hh时ss分mm秒");
		String strTime=sdf2.format(date);
		System.out.println(strTime);
	}




  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlyingZCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值