Date日期对象
日期也是个对象,日期对象也是由类产生的java.util.date
Date类构造方法
方法名 | 方法解释 |
---|---|
Date() | 返回当前系统的日期和时间 |
Date(long time) 传递毫秒值 | 日期和时间定位到指定的毫秒值 |
pub1ic static void main(String[] args) {
Date d = new Date();
system. out. print1n(d); // Fri Ju1 17 16:18:45 CST 2020
Date d2 = new Date(0);
System. out. print1n(d2);
}
Date类的其他方法
返回值 | 方法名 | 方法解释 |
---|---|---|
void | setTime(long time) | 日期和时间定位到指定的毫秒值 |
long | getTime() | 返回当前日期时间对应的毫秒值 |
public static void main(String[] args) {
Date d = new Date( );
//调用方法setTime()设置亳秒值
d. setTime(0);
System. out . println(d);
//调用getTime()方法获取毫秒值
long time = d.getTime();
System. out . println(time);
}
学习Date对象最终目的
我们必须会做一个事情:日期对象和毫秒值之间的互换
时间和日期不能数学计算,但是毫秒值可以(整数,可以数学计算)
- 日期对象转成毫秒值
。new Date().getTime()
。System.currentTimeMillis() - 毫秒值转成日期对象
。new Date(毫秒值)
。new Date().setTime(毫秒值)
SimpleDateFormat
对日期和时间进行格式化:格式可以我们自己定义
java.text.SimpleDateFormate类实现格式化
java.text.DateFormat是SimpleDateFormat的父类
实现日期的格式化
1,创建子类SimpleDateFormat的对象
。在构造方法中,传递我们自定义的日期格式
2,对象调用方法format(Date d)返回字符串
//实现日期的格式化:显示成2020年7月17日16点43分10秒
public static void main(String[] args) {
//创建子类SimpleDateFormat的对象
//构造方法,传递我的格式,看API文档
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
//调用sdf的方法String format(Date d)方法是继承父类的
String str = sdf. format(new Date( )) ;
System. out . println(str) ;//2020年7月17日 16点49分57秒
}
字符串转成日期对象
用户输入的日期,键盘,还是日历选择数据类型都是字符串
使用SimpleDateFormat的方法parse
- Date parse(String s)
public static void main(String[] args) throws ParseException {
//字符串转成日期对象
String s = "2020-5-1";
/*
*创建格式化对象
*构造方法中,传递日期格式
*注意:日期格式,和字符串一致
*/
SimpleDateFormat sdf = new SimpleDateFormat( "yyy-MM-dd");
//sdf对象调用方法parse(字符串)返回日期
Date d = sdf.parse(s);
System. out . println(d);
}
日期练习
要求:计算你活了多少天
出生日期,今天日期,两个日期的差值,就是活了多少天
数学计算,日期不能计算,依靠毫秒值
出生日期用户输入
实现步骤:
- 键盘输入,他的出生日期(String)
- 出生日期字符串转换为日期对象Date
- 今天的日期转为毫秒值
- 出生日期转为毫秒值
pub1ic static void main(String[] args) {
Scanner sc = new Scanner(System. in);
System. out . print1n("请输入你的生日格式: 2000-01-01");
//键盘输入,他的出生日期(String)
String birthdayString = sc. nextLine();
//获取今日的日期对应亳秒值
long todayMillis = new Date() . getTime();
//生日日期转成亳秒值
//先将字符串格式,转成日期Date
SimpleDateFormat sdf = new SimpleDateFormat( "yyy-MM-dd");
Date birthdayDate = sdf . parse(birthdayString) ;
long birthdayMillis = birthdayDate. getTime( );
//计算结果是毫秒值(转成对应的天数)
System . out . println ((todayMillis - birthdayMillis)/1000/60/60/24) ;
}
Calendar日历
Date对象的代替者,java.util.Calendar 日历对象
Calendar是抽象类,不能建立对象,找它的子类GregorianCalendar 格林威治日历
但是:创建日历对象,比我们想象的要复杂,国家、地区、语言、时区
Sun公司很善良,他们做完了
Calendar类静态方法static Calendar.getInstance()
返回子类对象
静态方法的里面 return new GregorianCalendar ()
pub1ic static void main(String[] args) {
//日历类的静态方法,获取子类对象
Calendar cal = Calendar .getInstance(); // return new GregorianCalendar ( ) ;
System.out.println(cal);
}
日历字段
组成一个日历,需要最基本的数据,年,月,日、小时、分钟…
组成部分成为日历字段,日历字段的数据类型是int类型
Calendar类的方法
方法:是calendar类中定义的方法,如果方法是抽象的,执行子类方法重写
方法不是抽象的,子类继承直接来使用
方法返回值 | 方法名字 | 方法解释 |
---|---|---|
static Calendar | getInstance() | 静态方法,返回子类的对象 |
int | get(int) | 返回指定的日历字段数据 |
void | set(int,int,int) | 设置日历,传递年,月,日 |
void | set(int,int) | 设置日历,设置指定的某个日历字段 |
void | add(int,int) | 日历字段的偏移量 |
pub1ic static void main(String[] args) {
Calendar cal = Calendar . getInstance();
/*
*get方法获取日历字段
*年,月,日,小时,分钟...
*
*/
int i = cal.get(Calendar.YEAR);
System. out . println(i+"年");//2020年
}
public static void main(String[] args) {
Calendar cal = Calendar . getInstance();
//设置日历,设置到今年的10月份
//参数1:设置哪个字段,参数2:具体数据
cal. set(Calendar . MONTH, 9);
//打印输出日历
System. out . println( cal. get(Calendar. YEAR)+"年" + (cal. get(Calendar .MONTH) + 1) + "月");
}
public static void main(String[ ] args) {
Calendar cal = calendar . getInstance();
//当前日历,向后偏移180天
//参数1:要偏移的字段,参数2:具体数据
cal. add( Calendar.DAY_ OF_MONTH, 180);
//打印输出日历
System. out . println( cal. get(Calendar. YEAR)+"年" + (cal. get(Calendar .MONTH) + 1) + "月"+cal. get(Calendar .DAY_ OF_ MONTH) + "日");
}
日历练习
需求:计算闰年
提供年份,计算出是不是闰年
实现思想:闰年的2月是29天,日历设置到这年的3月1日,向前偏移一天
pub1ic static void main(String[] args) {
Calendar cal = Calendar . getInstance();
//设置日历3月1日
cal.set(2020, 2, 1);
//向前偏移1天
cal. add(Calendar . DAY_ OF_ MONTH, -1);
//取出天数
int i = cal. get(Calendar . DAY_ OF_ MONTH);
System . out. println(i);//29
}