一:Date日期类
概述:Date
类表示特定的瞬间,精确到毫秒。Date类的构造函数可以把毫秒值转成日期对象。
1.Date():用来创建当前日期时间的Date对象
2.Date(long date):用于创建指定时间的Date对象,其中date参数表示1970年1月 1日0时0分0以来的毫秒数,即时间戳
public class DateTest01 {
public static void main(String[] args) {
//日期在开发中常来储存 生日、下单时间、付款时间、审批时间等
//类Date表示特定的时间,精确到毫秒
Date date1=new Date(); //获取系统的时间
System.out.println(date1);
long time=date1.getTime(); //计算当前时间距离1970年1月1日 08:00:00 的 毫秒值----时间戳
System.out.println(time);
Date date2=new Date(1000); //创建一个距离1970年1月1日 08:00:00(东八区) 经过了多少毫秒的一个时间
System.out.println(date2);
}
}
二:DateFormat类
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定的格式,从String对象转换为Date对象。
SimpleDateFormat 是一个具体类,用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式和解析
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从 ‘A’ 到 ‘Z’ 以及从 ‘a’ 到 ‘z’ 引号的字母被解释为表示日期或时间字符串的组件的模式字母
常用:
字母 | 单位 |
y | 年 |
M | 月 |
d | 日 |
H | 小时 |
m | 分 |
s | 秒 |
public class DateFormate02 {
public static void main(String[] args) throws ParseException {
//SimpleDateFormate 用来实现 日期 和字符串 之间的相互转化
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //创建日期格式化类的对象,指定格式符号
Date date1=new Date();
//把 日期 转化成指定格式的 字符串
String format=sdf.format(date1);
System.out.println(format);
//把指定格式的 字符串 转化成 日期
String time="2000/10/20 8:20:34";
Date date2=sdf.parse(time);
System.out.println(date2);
}
}
三:Calender类
Calendar类用于完成日期和时间字段的操作,它可以通过特点的方法设置和读取日期的特定部分。比如年、月、日、时、分、秒等。
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法
-
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历
例如:
public class CalendarTest03 {
public static void main(String[] args) {
//Calendar 类是一个抽象类,可以通过Canlendar的getInstance方法返回一个Calendar对象
Calendar calendar=Calendar.getInstance();
}
}
public class CalendarTest03 {
public static void main(String[] args) {
//Calendar 类是一个抽象类,可以通过Canlendar的getInstance方法返回一个Calendar对象
Calendar calendar=Calendar.getInstance();
Date date1=calendar.getTime();
System.out.println(date1);
long timeInMillis= calendar.getTimeInMillis();
System.out.println("当前时间的毫秒值:"+timeInMillis);
TimeZone timeZone=calendar.getTimeZone();
System.out.println("时区:"+timeZone);
//get方法可以根据 指定的日历字段 获取时间对应的值
int year=calendar.get(Calendar.YEAR);
System.out.println("年份:"+year);
int month= calendar.get(Calendar.MONTH);
System.out.println("月份"+(month+1)); //0-11 表示 1-12月
int date= calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("日期"+date);
int day0fYear= calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("本年的第"+day0fYear);
System.out.println("----------------");
//可获取 指定时间 月份0-11 表示1-12月
calendar.set(2000,9,28,25,32,35);
Date date2=calendar.getTime();
System.out.println(date2);
}
}
题目:请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:1.获取当前时间对应的毫秒值
2.获取自己出生日期对应的毫秒值
3.两个时间相减(当前时间– 出生日期)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
把String转换成Date对象
*/
public class Demo {
public static void main(String[] args) throws ParseException {
System.out.println("请输入出生日期 格式 YYYY-MM-dd");
// 获取出生日期,键盘输入
String birthdayString = new Scanner(System.in).next();
// 将字符串日期,转成Date对象
// 创建SimpleDateFormat对象,写日期模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 调用方法parse,字符串转成日期对象
Date birthdayDate = sdf.parse(birthdayString);
// 获取今天的日期对象
Date todayDate = new Date();
// 将两个日期转成毫秒值,Date类的方法getTime
long birthdaySecond = birthdayDate.getTime();
long todaySecond = todayDate.getTime();
long secone = todaySecond-birthdaySecond;
if (secone < 0){
System.out.println("还没出生呢");
} else {
System.out.println(secone/1000/60/60/24);
}
}
}