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 表示月份中的某天
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 的值
(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)的时间差
(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;
}
}