秒杀案例
学习了前面的Date类和SimpleDateFormat类,现在我们就用它们做一个小案例。
需求与分析
需求
- 小贾下单并付款的时间为:2023年11月11日 0:01:18
- 小皮下单并付款的时间为:2023年11月11日 0:10:51
- 秒杀开始时间:2023年11月11日 0:0:0
- 秒杀结束时间:2023年11月11日 0:10:0
- 请用代码说明这两位同学有没有参加上秒杀活动?
第一步我们要先把秒杀开始时间、结束时间、小贾下单时间和小皮下单时间都以字符串的格式存储到程序中
要判断两位同学是否成功参与了秒杀活动,就要比较时间值,而只有毫秒值是最好比较的,所以接下来我们的目标就是将字符串一步一步转换成毫秒值。
第二步,先把字符串解析成日期对象。
第三步,把日期对象转换成时间毫秒值来进行比较,判断是否成功参与到了秒杀活动
代码与运行结果
public class Test { public static void main(String[] args) throws ParseException { //1.把开始时间、结束时间、小贾下单时间、小皮下单时间拿到程序中来。 String start = "2023年11月11日 0:0:0"; String end = "2023年11月11日 0:10:0"; String xj ="2023年11月11日 0:01:18"; String xp = "2023年11月11日 0:10:57"; //2、把字符串的时间解析成日期对象。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date startDt = sdf.parse(start); Date endDt = sdf.parse(end); Date xjDt = sdf.parse(xj); Date xpDt = sdf.parse(xp); //3、把日期对象转换成时间毫秒值来判断,开始判断小皮和小贾是否秒杀成功。 long startTime = startDt.getTime(); long endTime = endDt.getTime(); long xjTime = xjDt.getTime(); long xpTime = xpDt.getTime(); if(xjTime >= startTime && xjTime <= endTime){ System.out.println("小贾您秒杀成功了!"); }else{ System.out.println("小贾您秒杀失败了~"); } if(xpTime >= startTime && xpTime <= endTime){ System.out.println("小皮您秒杀成功了!"); }else{ System.out.println("小皮您秒杀失败了~"); } } }
运行结果:
完成了这个小案例之后,我们来学习Calendar。
对于某些需求,例如将2024年08月10日增加一个月,我们用上面的思路来解决,需要以下步骤:
- 定义字符串记住:2024年08月10日
- 把字符串时间解析成Date日期对象
- 通过Date日期对象获取2024年8月10日的毫秒值
- 增加一个月的毫秒值:1000*60*60*24*30
- 再格式化时间毫秒值得到结果:2024年9月10日
而Calendar类就可以把这个问题简单化,直接单独获取、修改时间中的年、月、日、时、分、秒等。
Calendar
- 代表的是系统此刻时间对应的日历。
- 通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
Calendar日历类的常见方法
用法示例
public class Test { public static void main(String[] args) throws ParseException { System.out.println("1.得到系统刺客时间对应的日历对象"); Calendar now = Calendar.getInstance(); System.out.println(now); System.out.println(); System.out.println("2.获取日历中的某个信息"); int year = now.get(Calendar.YEAR); System.out.println(year); int days = now.get(Calendar.DAY_OF_YEAR); System.out.println(days); System.out.println(); System.out.println("3.拿到日历中记录的日期对象"); Date d = now.getTime(); System.out.println(d); System.out.println(); System.out.println("4.拿到时间毫秒值"); long time = now.getTimeInMillis(); System.out.println(time); System.out.println(); System.out.println("5.修改日历中的某个信息"); now.set(Calendar.MONTH,9); now.set(Calendar.DAY_OF_YEAR,125); System.out.println(now); System.out.println(); System.out.println("6.为某个信息增加或者减少多少"); now.add(Calendar.DAY_OF_YEAR,100); //增加100天 now.add(Calendar.DAY_OF_YEAR,-10); //减少10天 now.add(Calendar.DAY_OF_MONTH,-10); now.add(Calendar.HOUR,12); System.out.println(now); } }
运行结果:
注意:Calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。
END