日期时间
Date
Date类概述
- Date类的对象在java中代表的是当前所在系统的此刻日期时间
Date的构造器
名称 | 说明 |
---|---|
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间 |
Date的常用方法
名称 | 说明 |
---|---|
public long getTime() | 获取时间对象的毫秒值 |
Date类已弃用的有参构造器及方法
构造器 | 说明 |
---|---|
public Date(long time) | 把时间毫秒值转换成Date日期对象 |
Date方法 | 说明 |
---|---|
public void setTime(long time) | 设置日期对象的时间为当前时间毫秒值对应的时间 |
Date类记录时间的2种形式
-
形式1:日期对象
// 创建一个Date类的对象,代表系统此刻日期时间对象 Date date = new Date(); System.out.println(date); // 打印的是内容,说明完成了重写
-
形式2:时间毫秒值(参照常用API-System-System类的常用方法)
//用来作性能分析 long startTime = System.currentTimeMillis(); // 性能分析起始时间 for (int i = 0; i < 100000; i++) { System.out.println(i); } long endTime = System.currentTimeMillis(); // 性能分析结束时间 double time = (endTime - startTime) / 1000.0; System.out.println("for循环十万次花费:" + time);
-
测试代码
package com.java.data_test; import java.util.Date; /** * 计算当前时间往后走1小时121秒之后时间是多少 */ public class DateTransDemo { public static void main(String[] args) { long time = System.currentTimeMillis(); time += (60 * 60 + 121) * 1000; // 得到当前时间毫秒值 Date date = new Date(); System.out.println(date); // 当前时间 // 方法一:把时间毫秒值转换成对应的日期对象 Date d = new Date(time); System.out.println(d); // 目标未来时间 // 方法二:通过setTime直接将时间毫秒值转换成日期 Date dt = new Date(); dt.setTime(time); System.out.println(dt); } }
总结:
-
日期对象如何创建,如何获取时间毫秒值
Date date = new Date(); Long time = date.getTime();
-
时间毫秒值怎么恢复成日期对象
Date date = new Date(time); d.setTime(time)
SimpleDateFormat
SimpleDateFormat类的作用
- 可以对Date对象或时间毫秒值格式化成自定义的时间格式
- 也可以把字符串的时间形式解析成日期对象
SimpleDateFormat的构造器
构造器 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
SimpleDateFormat的格式化方法
格式化方法 | 说明 |
---|---|
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public final String format(Object time) | 将时间毫秒值格式化成日期/时间字符串 |
格式化的时间形式的常用的模式对应关系
时间形式 | 对应模式 |
---|---|
年 | y |
月 | M(大写) |
日 | d |
时 | H(大写) |
分 | m |
秒 | s |
2022-11-11 13:27:06 ------> yyyy-MM-dd HH:mm:ss
2022年11月11日 13:27:06 ------> yyyy年MM月dd日 HH:mm:ss
EEE 为星期 a 为上下午
-
格式化测试代码:
package com.java.data_test; import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDateFormatDemo { public static void main(String[] args) { Date date = new Date(); System.out.println(date); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a"); String rs = dateFormat.format(date); System.out.println(rs); //2022年02月03日 12:12:50 周四 下午 //计算当前时间往后走1小时121秒之后时间 long time = System.currentTimeMillis() + ((60 * 60 + 121) * 1000); String result = dateFormat.format(time); System.out.println(result); } }
SimpleDateFormat解析字符串时间成为日期对象
解析方法 | 说明 |
---|---|
public Date parse(String source) | 从给定字符串的开始解析文本以生成日期 |
解析时一定要使字符串参数的格式和被解析时间字符串的格式保持完全一致
parse返回的是Date型数据,因此需要Date型变量接收
-
日期解析测试代码
{ public static void main(String[] args) throws ParseException { String dateStr = "2022年02月03日11点11分11秒"; //解析 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒"); Date date = dateFormat.parse(dateStr); Date d = new Date(); //加L防止计算结果越界导致int值失真 long time = d.getTime() + ((15L * 24 + 14) * 60 * 60 + 13 * 60 + 12) * 1000; System.out.println(dateFormat.format(time)); //2022年02月19日03点11分34秒 } }
秒杀活动案例
-
案例描述:“1元秒杀活动”,秒杀开始时间:2022年2月14日 02:14:00,秒杀结束时间:2022年2月14日 02:14:59
-
案例需求:
- 张三下单并付款时间:2022年2月14日 02:14:11
- 李四下单并付款时间:2022年2月14日 02:15:01
- 分析说明二者是否成功参加秒杀活动
-
分析:
- 判断下单时间是否在开始到结束的范围内
- 把字符串的时间变成毫秒值
-
测试代码:
package com.java.data_test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class SpikeDemo { public static void main(String[] args) throws ParseException { // 记录开始结束时间 String startTime = "2022年2月14日 02:14:00"; String endTime = "2022年2月14日 02:14:59"; // 记录用户参与时间 String zs = "2022年2月14日 02:14:11"; String ls = "2022年2月14日 02:15:01"; // 解析时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月dd日 HH:mm:ss"); Date d1 = sdf.parse(startTime); Date d2 = sdf.parse(endTime); Date d3 = sdf.parse(zs); Date d4 = sdf.parse(ls); // Date提供了before和after用来判断时间先后,返回逻辑值 if (d3.after(d1) && d3.before(d2)) { System.out.println("张三秒杀成功!"); } if (d4.after(d1) && d4.before(d4)) { System.out.println("李四秒杀成功!"); } } }
Calendar
Calendar概述
- 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() | 拿到此刻时间毫秒值 |
-
测试代码:
package com.java.data_test; import java.util.Calendar; import java.util.Date; /* 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() | 拿到此刻时间毫秒值 */ public class CalendarDemo { public static void main(String[] args) { // 1.拿到系统此刻日历对象 Calendar cal = Calendar.getInstance(); System.out.println(cal); //日历中有大量的字段,可以通过打印对象来查询所有字段 // 2.获取日历的信息 int year = cal.get(Calendar.YEAR); //查询年 System.out.println(year); int mm = cal.get(Calendar.MONTH) + 1; //查询月 MONTH从0开始记月,因此需要+1 System.out.println(mm); int days = cal.get(Calendar.DAY_OF_YEAR); //查询今天是本年中的第几天 System.out.println(days); // 3.修改日历的某个字段信息 cal.set(Calendar.HOUR,12); //HOUR=12 System.out.println(cal); // 4.为某个字段增加/减少指定的值 cal.add(Calendar.DAY_OF_YEAR,10);// 计算10天后是什么时间 cal.add(Calendar.MINUTE,59); System.out.println(cal); // 5.拿到此刻日期对象 Date d = cal.getTime(); System.out.println(d); // 6.拿到此刻时间毫秒值 long time = cal.getTimeInMillis(); System.out.println("time"); } }
网友评论