java程序员从笨鸟到菜鸟之(十九)常用类Calendar和Date

Calendar(日历类)

  Calendar 类是一个 抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
  Calendar该类是一个 抽象类:不能实例化的,所以通过以下这个方法来创建对象
  public static Calendar getInstance();
  public int get(int field)----返回给定日历字段的值(系统当前)
  对常用字段的说明
  1---public static final int YEAR:表示日历中 的年
  2---public static final int MONTH:月份(注:是0开始计算的,加1)

  3---public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天

相关参考:点击打开链接----6:java命令

 实例1

package org.westos.calendar;

import java.util.Calendar;

public class CalendarDemo {
	
	public static void main(String[] args) {
		/* 1:
		 * 很重要(五颗星)
		 * 创建日历类对象
		 * 创建日历类对象,需要通过getInstance()方法创建对象?(是匿名内部类吗?)
		 * 疑问:为什么不是子类创建对象?
		 * */
		Calendar calendar = Calendar.getInstance(); 
		
		/* 2:
		 * public static final int YEAR
		 * 功能:获取年
		 * 
		 */
		int year = calendar.get(Calendar.YEAR);

		/* 3:
		 * public static final int MONTH
		 * 功能:年中的月份(从0开始)
		 *
		 */
		int month = calendar.get(Calendar.MONTH);

		 
		/* 4:
		 * public static final int DATE
		 * 功能:获取月份中的天(注意)
		 * 
		 */
		int date = calendar.get(Calendar.DATE);
		
		//输出(组合)
		System.out.println(year+"年"+(month+1)+"月"+date+"日");
	}
}

Calendar常用的成员方法

  1---public abstract void add(int field,int amount)
   功能:为给定的日历的字段添加或者减去时间偏移量
  2---public final voidset(int year,int month,int date)
   功能:设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

实例2

package org.westos.calendar;

import java.util.Calendar;

public class CalendarDemo2 {
	
	public static void main(String[] args) {
		
		/* 1
		 * 创建日历类对象
		 * 再次强调(很重要)
		 * */
		Calendar c = Calendar.getInstance() ;
		
		/* 2
		 * 简单练习:三年前的今天(由当前推)
		 * 方法:
		 * public abstract void add(int field,int amount)
		 * */
		
		c.add(Calendar.YEAR, -3);
		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+"日");

		/* 3
		 * 简单练习: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+"日");
		
		/* 4
		 * public final void set(int year, int month, int date)
		 * 方法说明:设置--年、月、日
		 * */
		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+"日");
		
	}
}

练习3

package org.westos.calendar;

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

/**
 * 键盘录入一个年份,获取任意一年的二月有多少天
 * 分析:
 * 		1)创建键盘录入对象,录入某一个年份
 * 		2)获取日历类对象---getInstance()
 * 		3)设置一个日历字段:年、月、日
 * 		    语法:日历类对象.set(year,2,1):这里其实表示3月1
 * 		4)将时间往前推一天
 * 		    语法:日历类对象.add(Calendar.DATE,-1) ;
 * 		5)获取DATE月份中的天,输出即可
 * 		
 * 
 */
public class CalendarTest {
	
	public static void main(String[] args) {
		
		//1--创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//2--录入并接收数据
		System.out.println("请您输入一个年份:");
		int year = sc.nextInt() ;
		
		//3--创建日历类对象
		Calendar c = Calendar.getInstance() ;
		//4--设置日历的字段:年、月、日
		c.set(year, 2, 1) ;//其实月份:(month+1):3月1
		
		//4--将时间往前推算一天
		c.add(Calendar.DATE, -1) ;
		
		System.out.println("任意一年的二月有:"+c.get(Calendar.DATE));
	}
}

相关链接:点击打开链接点击打开链接点击打开链接

Date

  Date类(日期类):
      表示特定的瞬间,精确到毫秒
      常用构造方法
   public Date():表示分配的一个Date对象;                                                                                                                                                          

   通过此无参构造获取当前系统的具体的时间

   public Date(long date):指定一个时间毫秒值(不常用) ,它和1970-1-1 00:00:00有时间差

      常见成员方法
   1---public long getTime():获取当前时间毫秒值
         说明:如果知道Date对象,可以通过getTime()获取时间毫秒值
   2---public void setTime(long time)-----不常用

实例1

package org.westos.date;

import java.util.Date;

public class DateDemo2 {
	
	public static void main(String[] args) {
		//创建一个日期对象
		Date d = new Date() ;
		System.out.println(d);
		
		/* 1
		 * public long getTime()
		 * 功能:获取当前时间毫秒值
		 * 
		 */
		long time = d.getTime() ;
		System.out.println(time);
		/* 2
		 * 通过System类currentTimeMillis()
		 * 功能:可以获取当前时间的毫秒数(系统)
		 * 与Date的getTime()类似
		 * */
		System.out.println(System.currentTimeMillis());
		
		/* 3
		 * public void setTime(long time)
		 * 功能:设置当前时间的毫秒数
		 * 疑惑:用在哪呢?
		 * 后续会补充
		 * */
		d.setTime(1000) ;
		System.out.println(d);
	}
}

重要的成员方法(五颗星)

 将Date对象--->String类型的日期的"文本格式"-----格式化
   3---public final String format(Date date)
 String类型日期的"文本格式"---->Date日期对象----解析
  4---public Date parse(String source) 

      说明:该方法本身会抛出一个异常-----ParseException(解析异常---编译时期异常)

      要进行转换:必须使用中间桥梁---DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化,但是DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类(SimpleDateFormat )进行实例化:
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
   SimpleDateFormat类常用的构造方法
  Date---格式化--->String文本格式
public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat对象
  日期和时间模式
  y 比如:2017-------->yyyy
  M 年中的月份:2 ------>MM
  d 月份中的天数 :------>dd
  H 小时  ------------------->HH
  m 小时中的分钟数--- ->mm
  s 分钟中的秒数 -------->ss
 开发常用模式-------->yyyy-MM-dd HH:mm:ss

实例2
package org.westos.date;

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


public class DateFormatDemo {
	
	public static void main(String[] args) throws ParseException {
		
		//Date日期对象--->格式化---->String:日期文本格式
		// 1---创建日期对象
		Date d = new Date() ;
		System.out.println(d);
		
		/* 
		 * 2---创建SimpleDateFormat类对象,用该对象格式化Date对象
		 * public SimpleDateFormat(String pattern)
		 * 说明:pattern(匹配模式--字符串形式)
		 * 形如:"yyyy-MM-dd HH:mm:ss"
		 * */
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
		
		/*
		 * 3-----格式化
		 * 格式化:public final String format(Date date)
		 * 语法:SimpleDateFormat对象.format(日期对象)
		 * 翻译:按照此模式,对当前时间以此模式输出
		 * 返回值类型:String
		 * 参数类型:Date
		 * */
		String dateStr = sdf.format(d) ;
		System.out.println("dateStr:"+dateStr);
		
		System.out.println("-----------------------");
		
		/*
		 * String日期"文本格式"----->解析----->Date对象
		 * 注意事项:一定要保证SimpleDateFormat中的String Pattern这个模式
		 * 和当前给的字符串的文本格式的模式必须一致!
		 * 语法格式:SimpleDateFormat对象.format(String s)
		 * Date----GMT(格林威治时间)
		 * 举例如下:
		 * */
		
		String s = "2017-12-30" ;
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ;
		/*
		 * java.text.ParseException: Unparseable date: "2017-12-30"
		 * 说明: 在main方法中抛异常(解析异常)--throws ParseException
		 * */
		Date d2 = sdf2.parse(s);

		System.out.println("d2:"+d2);
	}
}
练习1工具类
package org.westos.date_02;

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

/**
 * 这是将Date和String相互转换的日期工具类
 * @author Apple
 */
public class DateUtil {
	
	//将无参构造私有化,为了不让外界创建对象
	private DateUtil(){
		
	}
	
	/**
	 * 该方法是将Date日期对象格式化成一个String日期"文本格式"
	 * @param d
	 * 		需要被转换的日期对象
	 * @param format
	 * 		需要转换的时候提供的一种模式
	 * @return
	 * 		最终返回的就是日期的文本格式
	 */
	public static String dateToString(Date d,String format){		
                //创建SimpleDateFormat对象
/*SimpleDateFormat sdf = new SimpleDateFormat(format) ;//格式化String str = sdf.format(d) ;return str ;*/return new SimpleDateFormat(format).format(d) ;}/** * 该方法是将String的日期"文本格式"解析成一个Date日期对象 * @param s * 表示需要被解析的日期文本格式 * @param format * 表示解析日期文本格式是需要使用的一种模式 * @return * 返回的就是日期Date对象 * @throws ParseException * 抛出解析异常 */public static Date stringToDate(String s,String format) throws ParseException{//创建SimpleDateFormat对象/*SimpleDateFormat sdf = new SimpleDateFormat(format) ;Date date = sdf.parse(s) ;return date ;*/return new SimpleDateFormat(format).parse(s) ;}}

测试类
package org.westos.date_02;

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

/**
 * 日期和String相互转换的一个测试类
 * @author Apple
 */
public class DateUtilDemo {
	
	public static void main(String[] args) throws ParseException {
		
		//Date--->String
//		创建一个Date对象
		Date d = new Date() ;
		
		//调用功能
		String str = DateUtil.dateToString(d, "yyyy-MM-dd HH:mm:ss") ;
		System.out.println("str:"+str);
		
		String str2 = DateUtil.dateToString(d, "yyyy-MM-dd") ;
		System.out.println("str2:"+str2);
		
		String str3 = DateUtil.dateToString(d, "HH:mm:ss") ;
		System.out.println("str3:"+str3);
		
		//String---->Date
		//模式要和字符串文本格式一致
		String s = "2018-6-25 16:26:21" ;
		//调用功能
		Date date = DateUtil.stringToDate(s, "yyyy-MM-dd HH:mm:ss");
		System.out.println("date"+date);
		
		
		
	}
}
练习2
package org.westos.date_02;

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

/**
 * 键盘录入你的出生年月日,计算你来到这个世界有多少天了?
 * 
 * 分析:
 * 		1)键盘键盘录入出生年月日,录入这一个String类型的数据
 * 		2)创建SimpleDateFormat对象指定一种模式
 * 		3)将当前String日期文本格式转换成date对象
 * 		4)通过Date对象获取getTime():获取时间毫秒值
 * 		5)得到当前系统时间的毫秒值(System.currentTimeMillis)
 * 		6)---(5)-(4)=long 类型的时间
 * 		7)换算成多少天
 * 		8)输出
 * @author Apple
 */
public class MyYearOldTest {
	
	public static void main(String[] args) throws ParseException {
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//录入并接收数据
		System.out.println("请输入你的出生年月日: ");
		String line = sc.nextLine() ;
		
		//使用刚才DateUtil工具类
		Date d = DateUtil.stringToDate(line, "yyyy-MM-dd") ;
		//获取当前出生年日所在的时间毫秒值
		long oldTime = d.getTime() ;
		//获取当前系统时间的毫秒值
		long nowTime = System.currentTimeMillis() ;
		
		long time = nowTime - oldTime ;
		
		//换算
		long day = time/1000/60/60/24 ;
		
		//输出
		System.out.println("你来到这个世界有"+day+"天了");
	}
}

相关书籍参考:《Calender的使用详解》

相关博客链接:1---点击打开链接-----系统时间与本地时间

               2---点击打开链接-----文字部分(开发常用)

              3---点击打开链接-----例子

               4---点击打开链接-----例子

               5---点击打开链接-----例子

6---点击打开链接-----例子


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值