【我的Java笔记】常用类_日历类

Calendar类(抽象类)

1.概述:Calendar类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

2.创建对象方法:
该类为一个抽象类,不能实例化,所以通过方法来获得对象:public static Calendar getInstance()

3. public static final int YEAR 表示日历中 的年
  public static final int MONTH 月份
注:月份是从0开始计算的,故输出时应月份+1
  public static final int DATE 表示月份中的某天

4.Calendar常用的成员方法:
(1)public int get(int field)返回给定日历字段的值
   (2)public abstract void add(int field,int amount)为给定的日历的字段添加或者减去时间偏移量
   (3)public final void set(int year,int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

例1:
import java.util.Calendar;

public class CalendarDemo {
	
	public static void main(String[] args) {
		// 创建日历类对象(需要通过getInstance()方法创建对象)
		Calendar calendar = Calendar.getInstance();
		
		// 获取年
		// public static final int YEAR
		int year = calendar.get(Calendar.YEAR);

		// 获取:年中的月份
		// public static final int MONTH
		int month = calendar.get(Calendar.MONTH);

		// 获取月份中的天
		// public static final int DATE
		int date = calendar.get(Calendar.DATE);
		
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
	}
}




例2:
import java.util.Calendar;

public class CalendarDemo {
	
	public static void main(String[] args) {
		//创建日历类对象
		Calendar c = Calendar.getInstance() ;
				
		//获取年
		int year = c.get(Calendar.YEAR) ;
		//获取月
		int month = c.get(Calendar.MONTH);
		//获取月中的天
		int date = c.get(Calendar.DATE);
				
		System.out.println(year+"年"+(month+1)+"月"+date+"日");	//月份从0开始计算
				
				
		/*
		需求1:三年前的今天
		public abstract void add(int field,int amount)
		c.add(Calendar.YEAR, -3);
				
		//获取年
		year = c.get(Calendar.YEAR) ;
		//月
		month = c.get(Calendar.MONTH) ;
		//天
		date = c.get(Calendar.DATE) ;
				
		System.out.println(year+"年"+(month+1)+"月"+date+"日");	//月份从0开始计算
		*/		
				
		
		//需求2:5年后的十天前
		c.add(Calendar.YEAR, 5) ;
		c.add(Calendar.DATE, -10) ;
				
		//获取年
		year = c.get(Calendar.YEAR) ;
		//获取月
		month = c.get(Calendar.MONTH) ;
		//月汇总的天
		date = c.get(Calendar.DATE) ;
				
		System.out.println(year+"年"+(month+1)+"月"+date+"日");	//月份从0开始计算
				
		
		//public final void set(int year, int month, int date)
		//设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
		c.set(2018,5,20) ;
		//获取年
		year = c.get(Calendar.YEAR) ;
		//获取月
		month = c.get(Calendar.MONTH) ;
		//月汇总的天
		date = c.get(Calendar.DATE) ;
		System.out.println(year+"年"+(month+1)+"月"+date+"日");	//月份从0开始计算
	}
}






例3:
/*
 * 需求:键盘录入任意一个年份,获取任意一年的二月有多少天
 * 
 * 分析:
 * 		(1)创建键盘录入对象,录入某一个年份
 * 		(2)获取日历类对象,getInstance()
 * 		(3)设置一个日历字段,年,月,日
 * 			日历类对象.set(year,2,1):这里其实表示3月1
 * 		(4)将时间往前推一天
 * 			日历类对象.add(Calendar.DATE,-1) ;
 * 		(5)获取DATE月份中的天,输出
 * */

import java.util.Calendar;
import java.util.Scanner;

public class CalendarTest {
	
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//录入并接收数据
		System.out.println("请您输入一个年份:");
		int year = sc.nextInt() ;
		
		//创建日历类对象
		Calendar c = Calendar.getInstance() ;
		
		//设置日历的字段,年,月,日
		c.set(year, 2, 1) ;//月份实际为:(month+1):3月1
		
		//将时间往前推算一天,则为二月的最后一天,即二月的天数
		c.add(Calendar.DATE, -1) ;
		
		System.out.println(year+"年的二月有"+c.get(Calendar.DATE)+"天");
	}
}










Date类

1.概述:Date类(日期类)表示特定的时间,精确到毫秒

2.构造方法:
(1)public Date() 表示分配的一个Date对象(无参): 通过无参构造获取当前系统的具体的时间
例:Date date = new Date();
System.out.println(date);
结果:Mon Nov 06 16:34:19 CST 2017
  (2)public Date(long date) 指定一个时间毫秒值,和GMT(
1970-1-1 00:00:00)的时间差

3.Date类中的成员方法:
(1)public long getTime() 获取当前时间毫秒值
注:System类中的static long currentTimeMillis() 也具有相同的功能
(2)public void setTime(long time) 表示 1970年1月1日00:00:00 GMT 以后 time 毫秒的时间点








DateFormat类(抽象类)+SimpleDateFoemat类

1.实现方法:借用子实现类SimpleDateFormat类

2.DateFormat类概述:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(日期 -> 文本)、解析(文本-> 日期)和标准化

3.SimpleDateFormat类概述:SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类(DateFormat类的子实现类)

4.注:SimpleDateFormat和ParseException位于 java.text 包下

*.格式化与解析:
格式化:Date类对象——>String类型日期的"文本格式"
方法:public final String format(Date date)
解析:String类型的日期"文本格式"——>Date日期对象
方法:public Date parse(String source)
注1:解析时该方法本身会抛出一个异常:ParseException ( 解析异常:编译时期异常)
注2:解析时给定的字符串模式一定要与String Pattern传入的格式相同!!!
(1)实现方法:需借助DateFormat类的子实现类SimpleDateFormat类来进行格式化与解析
(2)构造方法(格式化):
public SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
(3)日期的时间的标准模式:
y
yyyy
M年中的月份MM
d月份中的天数dd
H小时HH
m小时中的分钟mm
s分钟中的秒ss



例:
/*
 * 格式化和解析的练习:SimpleDateFormat 类的应用
 * */
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateFormatTest {
	public static void main(String[] args) throws ParseException {
		
		//格式化:Date日期对象——>String类型日期文本格式
		
		Date date = new Date() ;	//创建日期对象
		System.out.println("date:"+date);	//打印date
		System.out.println("-----------------------");
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;	//使用public SimpleDateFormat(String pattern)方法:创建SimpleDateFormat类对象,用该对象格式化Date对象
		
		String dateStr = sdf.format(date) ;	//public final String format(Date date) 方法格式化
		System.out.println("dateStr:"+dateStr);
		
		System.out.println("-----------------------");
		
		//解析:String类型日期文本格式——>Date对象
		/**
		 * 注意事项:
		 * 		一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!
		 */
		String s = "2017-11-06" ;	//必须与下文的yyyy-MM-dd格式相同!
		
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ;	//创建SimpleDateFormat类的对象,用该对象解析String类型日期的文本格式
		
		Date date1 = sdf2.parse(s);	//public Date parse(String source)
		System.out.println("date1:"+date1);
	}
}











课堂练习

练习一:Date和String相互转换的日期工具类

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

//DateUtil工具类
class DateUtil {
	private DateUtil() {
		
	}
	
	//格式化
	public static String dateToString(Date date,String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String str = sdf.format(date);
		return str;
		/*
		 *方式二:
		 * return new SimpleDateFormat(pattern).format(date);
		 * */		
	}
	
	//解析
	//注:需抛出解析异常 ParseException
	public static Date stringToDate(String str,String pattern) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		Date date = sdf.parse(str);
		return date;
	}

}



//DateUtil测试类
public class DateUtilTest {
	public static void main(String[] args) throws ParseException{
		//格式化:
		String str = DateUtil.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss");
		System.out.println("格式化后为:"+str);
		
		System.out.println("-------------------------------------");
		
		//解析:
		Date date1 = DateUtil.stringToDate("2017-11-06 18:42:14", "yyyy-MM-dd HH:mm:ss");
		System.out.println("解析后为:"+date1);
	}
}







练习二

/**
 * 需求:键盘录入自己的出生年月日,计算你来到这个世界有多少天了?
 * 
 * 分析:
 * 		1)键盘键盘录入出生年月日,录入这一个String类型的数据
 * 		2)创建SimpleDateFormat对象指定一种模式
 * 		3)将当前String日期文本格式转换成date对象
 * 		4)通过Date对象获取getTime():获取时间毫秒值
 * 		5)得到当前系统时间的毫秒值(System.currentTimeMillis)
 * 		6):5)-4)=long 类型的时间
 * 		7)换算成多少天
 * 		8)输出
 */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class BornTest {
	public static void main(String[] args) throws ParseException {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//录入并接收数据
		System.out.println("请以'yyyy-MM-dd'的格式输入您的出生年月日: ");
		String str = sc.nextLine() ;
		
		//使用DateUtil工具类
		Date date = DateUtil.stringToDate(str, "yyyy-MM-dd") ;
		//获取当前出生年日所在的时间毫秒值
		long bornTime = date.getTime() ;
		//获取当前系统时间的毫秒值
		long nowTime = System.currentTimeMillis() ;
		
		long time = nowTime - bornTime ;
		
		//换算
		long day = time/1000/60/60/24 ;
		
		//输出
		System.out.println("你来到这个世界有"+day+"天了!");
	}
}

//DateUtil工具类
class DateUtil {
	private DateUtil() {
		
	}
	
	//格式化
	public static String dateToString(Date date,String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String str = sdf.format(date);
		return str;
		/*
		 *方式二:
		 * return new SimpleDateFormat(pattern).format(date);
		 * */		
	}
	
	//解析
	//注:需抛出解析异常 ParseException
	public static Date stringToDate(String str,String pattern) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		Date date = sdf.parse(str);
		return date;
	}

}















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值