Java常用API(二)
日期与时间
Date
- Date类的对象在Java中代表的是当前所在系统的此刻日期时间
Date的构造器
名称 | 说明 |
---|---|
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间 |
public Date(long time) | 把时间毫秒值转换成Date日期对象 |
Date的常用方法
名称 | 说明 |
---|---|
public long getTime() | 获取时间的毫秒值 |
public void setTime(long time) | 设置日期对象的时间为当前时间毫秒值对应的时间 |
Date类记录时间的2种形式
1.日期对象
//1.创建一个Date类的对象,代表系统此刻日期时间对象
Date d = new Date();
//输出结果:Thu Aug 25 21:50:11 CST 2022
System.out.println(d);
2.时间毫秒值
指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的(long)
//获取当前时间的毫秒值
long time = d.getTime();
//输出结果:1661435411923
System.out.println(time);
- 案例:计算出当前时间往后走1小时121秒之后的时间是多少?
//1.定义一个当前日期的时间对象
Date d1 = new Date();
System.out.println(d1);
//2.获取当前日期时间对象的毫秒值 当前时间往后走 1小时121秒
long time1 = d1.getTime();
time1 += (60L * 60 + 121) * 1000;
//3.调用Date的方法将时间毫秒值转换成Date日期对象
Date d2 = new Date(time1);
System.out.println(d2);
1.日期时间如何创建,如何获取时间毫秒值?
- Date date = new Date();
- Long time = date.getTime();
2.时间毫秒值怎么恢复成日期对象?
- Date d = new Date(time);
SimpleDateFormat
- 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式
- 也可以把字符串的时间形式解析成日期对象
SimpleDateFormat的构造器
构造器 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
SimpleDateFormat的格式化方法
格式化方法 | 说明 |
---|---|
public final format(Date date) | 将日期格式化成日期/时间字符串 |
public final String format(Object time) | 将时间毫秒值格式化成日期/时间字符串 |
格式化的时间形式的常用对应关系如下:
2020-11-11 19:12:17 -----------------------------------yyyy-MM-dd HH:mm:ss
2020年11月11日 19:12:17 ---------------------------- yyyy年MM月dd日 HH:mm:ss
//1.日期对象
Date d = new Date();
System.out.println(d);
//2.格式化这个日期对象 (指定最终格式化的形式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
//3.开始格式化日期对象成为喜欢的字符串形式
String str = sdf.format(d);
System.out.println(str);
System.out.println("----------------");
//4.格式化时间毫秒值
//需求:请问121秒后的时间是多少
long time = System.currentTimeMillis();
System.out.println(new Date(time));
String str1 = sdf.format(time + 121 * 1000 );
System.out.println(str1);
SimpleDateFormat解析字符串时间成为日期对象
解析方法 | 说明 |
---|---|
public Date parse(String source) | 从给定字符串的开始解析文本以生成日期 |
案例:计算出 2021年08月06日11点11分11秒,往后走2天14小时49分06秒后的时间是多少?
// 学会使用SimpleDateFormat解析字符串时间成为对象
//计算出 2021年08月06日11点11分11秒,往后走2天14小时49分06秒后的时间是多少
//1.把字符串时间写入程序中
String dateStr = "2021年08月06日 11:11:11";
System.out.println(dateStr);
//2.把字符串时间解析成日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse(dateStr);
//3.往后走 2天14小时49分06秒
long time = d.getTime();
time += (2L * 24 * 60 * 60 + 14 * 60 * 60 + 49 * 60 + 6) * 1000;
//4.格式化这个时间毫秒值得出结果
System.out.println(sdf.format(new Date(time)));
1.SimpleDateFormat可以格式化哪些时间形式?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String rs1 = sdf.format(date);
String rs2 = sdf.format(time);
2.SimpleDateFormat如何进行字符串时间的解析的?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2021-08-01 11:11:11");
需求:
- 小明下单付款的时间为:2020年11月11日 0:03:47
- 小花下单付款的时间为:2020年11月11日 0:10:11
- 请说明这两位同学有没有参加上秒杀活动
分析:
- 判断下单时间是否在开始到结束的范围内
- 把字符串形式的时间编程毫秒值
//1.将时间写入程序
String strdate1 = "2020年11月11日 0:03:47"; //小明的下单时间
String strdate2 = "2020年11月11日 0:10:11"; //小花的下单时间
String starttime = "2020年11月11日 0:00:00";
String endtime = "2020年11月11日 0:10:00";
//2.判断下单时间是否在开始到结束的范围内
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
long time1 = sdf.parse(starttime).getTime();
long time2 = sdf.parse(endtime).getTime();
if (sdf.parse(strdate1).getTime() > time1 && sdf.parse(strdate1).getTime() < time2){
System.out.println("小明抢单成功,可以发货");
}else{
System.out.println("小明抢单失败,再接再厉");
}
if (sdf.parse(strdate2).getTime() > time1 && sdf.parse(strdate2).getTime() < time2){
System.out.println("小花抢单成功,可以发货");
}else{
System.out.println("小花抢单失败,再接再厉");
}
Calendar
- Calendar代表了系统此刻日期对应的对象
- Calendar是一个抽象类,不能直接创建对象
Calendar常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 取日期中的某个字段信息 |
public void set(int field,int value) | 修改日历的某个字段信息 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值 |
public final Date getTime() | 拿到此刻日期对象 |
public long getTimeInMillis() | 拿到此刻时间毫秒值 |
//1.拿到系统此刻日历对象
Calendar cal = Calendar.getInstance();
System.out.println(cal);
//2.获取日历的信息:public int get(int field):取日期中的某个字段信息 还有很多
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH) + 1);
System.out.println(cal.get(Calendar.DAY_OF_YEAR));
//3.请问65天后是什么时间 public void add(int field,int amount)
cal.add(Calendar.DAY_OF_YEAR,65);
//4.public final Date getTime(): 拿到此刻日期对象
Date d1 = cal.getTime();
System.out.println(d1);
注意:Calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化
1.Calendar如何去得到日历对象的?
- public static Calendar getInstance():获取当前日历对象