019Java 日期操作

日期操作

1.Date及常用API

1.1java中的时间

java中的时间使用标准类库的Date类表示,是距离一个固定时间点的毫秒数(long类型,可正可负)表达一个特定的时间点。

固定时间点叫纪元(epoch),是UTC时间1970年1月一日 00:00:00

UTC(世界调整时间)和GMT(格林威治时间)一样,是具有一种实际目的的标准时间。

1.2Date类简介

java.util.Date 类封装日期及时间信息

由于千年虫等问题,Date中大多数用于计算的方法已经被Calendar所取代

1.3setTime和getTime方法

         /**
	 * 测试testDateTime方法
	 */
	@Test
	public void testGetDate(){
		Date date=new Date();
		System.out.println(date);
		//输出结果为:Fri Nov 28 13:57:28 CST 2014
		//1970年1月1日零时距此刻的毫秒数
		long time=date.getTime();
		System.out.println(time);
		输出结果为:1417154248386
		
		//增加一天的毫秒数
		time+=60*60*24*1000;
		date.setTime(time);
		<pre name="code" class="java">                 System.out.println(date);
		//输出结果为:Sat Nov 29 13:57:28 CST 2014

//由此可以看出,date在一天的日期上加了一天

 


有上述代码可以看出

getTime()方法是用作返回日期从1970-01-01 00:00:00(纪元)到此时此刻的毫秒数

setTime(long time)方法是用作设置一个固定的毫秒数time,返回毫秒数下的日期(Date)对象

1.4Date中的toString方法

Date类重写了toString()方法,用来描述当前对象Date所表示的时间格式如下

                System.out.println(date);
		//输出结果为:Sat Nov 29 13:57:28 CST 2014

2.SimpleDateFormat

2.1SimpleDateFormat简介

有时我们需要输出或输入一个具有特定格式的时间日期,如(yyyy-MM-dd HH-mm-ss)这样我们可以更好的用来描述日期信息。

java.text.SimpleDateFormat是一个与语言环境有关的方式来格式化和解析日期的类。允许如下:

解析(文本->日期)

格式化(日期->文本)

2.2日期模式匹配字符,如图下:


2.3将Date转换为字符串(格式化)如下代码

         /**
	 * 测试format方法
	 */
	
	public void testFormat(){
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //创建SimpleDateFormat对象
		Date date=new Date();
		String dateStr=sdf.format(date);
                //将日期对象格式化为字符串
		System.out.println(dateStr);
		//输出结果:2014-11-28 17:18:32
	}
2.4将String解析为Date,代码如下

         /*
	 * 测试parse方法
	 */
	@Test
	public void testPause() throws ParseException{
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		//创建SimpleDateFormat对象
		String str="2013-12-25";
		//和SimpleDateFormat格式匹配的字符串
		Date date=sdf.parse(str);
		//将字符串解析为Date类型对象
		System.out.println(date);
		//输出结果为:Wed Dec 25 00:00:00 CST 2013
		
	}

注意:有异常抛出

3.Calendar

3.1Calendar简介

java.util.Calendar类用于封装日历信息,其主要作用在于方法可以对时间分量进行运算

Calendar是抽象类,其具体的子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(阳历),对应大多数国家的使用的标准日历系统

3.2getInstance方法

Calendar提供的一个方法getInstance,用于获得此类型的一个通用对象。

Calendar的方法getInstance用于返回一个Calendar对象,其日历字段已由当前日期和时间进行了初始化

Calendar c=Calendar.getInstance();

代码如下:

         /*
	 * 测试getInstance方法
	 */
	@Test
	public void testGetInstance(){
		Calendar c=Calendar.getInstance();
		//输出Calendar的实际类型
		System.out.println(c.getClass().getName());
		//输出结果:java.util.GregorianCalendar
		
		//getTime()方法返回对应Date对象
		System.out.println(c.getTime());
		//Fri Nov 28 17:41:17 CST 2014
		
		
		//创建GregorianCalendar对象
		GregorianCalendar c1=new GregorianCalendar(2013,Calendar.DECEMBER,25);
		System.out.println(c1.getTime());
		//Wed Dec 25 00:00:00 CST 2013
	}

 3.3设置日期和时间分量:使用set方法时间分量和日期进行设置,代码如下:

         /*
	 * 测试set方法
	 */

	public void testSet(){
		Calendar c=Calendar.getInstance();
		c.set(Calendar.YEAR,2013);
		c.set(Calendar.MONTH, Calendar.DECEMBER);
		c.set(Calendar.DATE,25);
		System.out.println(c.getTime());
		//Wed Dec 25 17:53:10 CST 2013
		
		
		c.set(Calendar.DATE,32);
		System.out.println(c.getTime());
		//Wed Jan 01 17:53:10 CST 2014
	}
3.4获取如期及时间分量:使用get(时间分量)方法用于获取时间分量的值

         /*
	 * 测试get方法
	 */
	
	public void testGet(){
		Calendar c=Calendar.getInstance();
		c.set(Calendar.YEAR,2013);
		c.set(Calendar.MONTH, Calendar.DECEMBER);
		c.set(Calendar.DATE,25);
		int dayOfWeek=c.get(Calendar.DAY_OF_WEEK);
		System.out.println(dayOfWeek);
		//输出结果:4表示周三,因为在公历中周日为每周的第一天
	}
3.5getActualMaximum方法:返回日期段的最大值,如下代码:

	/*
	 * 输出某一年每个月的天数
	 * 输出某一年每个月的周数
	 */
	@Test
	public void testGetActualMaxiMum(){
		int year=2013;
		Calendar c=Calendar.getInstance();
		c.set(Calendar.YEAR,year);
		//c.set(Calendar.MONTH,1);
		for(int month=Calendar.JANUARY;month<=Calendar.DECEMBER;month++){
			c.set(Calendar.MONTH,month);
			System.out.println(year+"年"+(month+1)+"月有"+c.getActualMaximum(Calendar.DATE)+"天");
			System.out.println(year+"年"+(month+1)+"月有"+Calendar.WEEK_OF_MONTH+"周");
		}
	}
//输出结果如下
//<span style="white-space:pre">			</span>2013年1月有31天
//<span style="white-space:pre">			</span>2013年1月有4周
//<span style="white-space:pre">			</span>2013年2月有31天
//<span style="white-space:pre">			</span>2013年2月有4周
//<span style="white-space:pre">			</span>2013年3月有31天
//<span style="white-space:pre">			</span>2013年3月有4周
//<span style="white-space:pre">			</span>2013年4月有30天
//<span style="white-space:pre">			</span>2013年4月有4周
//<span style="white-space:pre">			</span>2013年5月有31天
//<span style="white-space:pre">			</span>2013年5月有4周
//<span style="white-space:pre">			</span>2013年6月有30天
//<span style="white-space:pre">			</span>2013年6月有4周
//<span style="white-space:pre">			</span>2013年7月有31天
//<span style="white-space:pre">			</span>2013年7月有4周
//<span style="white-space:pre">			</span>2013年8月有31天
//<span style="white-space:pre">			</span>2013年8月有4周
//<span style="white-space:pre">			</span>2013年9月有30天
//<span style="white-space:pre">			</span>2013年9月有4周
//<span style="white-space:pre">			</span>2013年10月有31天
//<span style="white-space:pre">			</span>2013年10月有4周
//<span style="white-space:pre">			</span>2013年11月有30天
//<span style="white-space:pre">			</span>2013年11月有4周
//<span style="white-space:pre">			</span>2013年12月有31天
//<span style="white-space:pre">			</span>2013年12月有4周
3.6add方法:将给定的时间分量加上给定的值,若给定的值为负,则减去给定的值,代码如下:

	/*
	 * 输出一年后在减去三月的日期
	 */
	
	public void testAdd(){
		Calendar c=Calendar.getInstance();
		c.add(Calendar.YEAR,1);
		c.add(Calendar.MONTH,-3);
		System.out.println("year:"+c.get(Calendar.YEAR));
		//year:2015
		System.out.println("month:"+(c.get(Calendar.MONTH)+1));
		//month:8
		System.out.println("date:"+c.get(Calendar.DATE));
		//date:28
	}

3.7setTime和getTime方法

Date getTime():指使用Date描述Calendar表示日期并返回

  void setTime(Date date):使用Calendar来描述Date日期

代码如下:

         /*
	 * 使用Date表示的日期和使用的Calendar对象表示的日期进行互换
	 */

	public void testSetTimeAndGetTime(){
		Calendar c=Calendar.getInstance();
		Date date=new Date();
		c.setTime(date);
		date=c.getTime();
	}





 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值