目录
秒杀案例
学习了前面的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 static Calendar getInstance() | 获取当前日历对象 |
public int get(int field) | 获取日历中的某个信息。 |
public final Date getTime() | 获取日期对象。 |
public long getTimeInMillis() | 获取时间毫秒值 |
public void set(int field,int value) | 修改日历的某个信息。 |
public void add(int field,int amount) | 为某个信息增加/减少指定的值 |
用法示例
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
学习自:黑马程序员——JavaSE课程