Calendar之商品促销活动日期
直接看题目:
计算商品促销日期:
商场需要在一件商品过期的前两周的周五开始做促销
计算商品过期日期往前推两周的周五的日期
public class ShangPinCuXiao {
public static void main(String[] args) {
//定义一个键盘扫描器
Scanner in = new Scanner(System.in);
//提示用户输入的时间及格式
System.out.println("请输入商品的过期时间:(格式:2020-05-20)");
//使用str变量来接收用户输入的时间
String str = in.nextLine();
//格式化时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
//调用SimpleDateFormat的parse方法,转换成date类型
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
//创建格林威治时间对象
Calendar cal = Calendar.getInstance();
//将用户输入的时间传入格林威治中
cal.setTime(date);
//两周也就是14天
cal.add(Calendar.DAY_OF_YEAR, -14);
//设置本周的周五
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
//将格林威治时间转换成date类型
date = cal.getTime();
//进行格式化成String类型
String after = sdf.format(date);
//最终输出时间
System.out.println("商品要开始促销的时间是:"+after);
}
}
这里面使用到的知识点有:
键盘扫描器(不做介绍)
格式化时间:SimpleDateFormat
y:年 yyyy:四位年显示
M:月 MM:两位月显示
d:日 dd:两位日显示
a:上午and下午显示
E:星期
H:时 HH:两位时显示
m:分 mm:两位分显示
s:秒 ss:两位秒显示
字符串转Date:
String str = "2020-05-20 13:14:52";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//因为Date有一个ParseException异常,可以throws抛出去,也可以try{}catch(){},这里推荐try{}catch(){}
Date date = null;
try{
//sdf.parse();该方法是字符串转date类型得方法
date = sdf.parse(str);
System.out.println(date);
}catch(ParseException e){
e.printStackTrace();
}
Date转字符串:
//首先获取一个当前Date类型时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//sdf.format();该方法是将Date类型时间转换为String类型
String str = sdf.format(date);
System.out.println(str);
时间类:Date:
//Date类型的创建,获取的是当前时间
Date date = new Date();
//输出当前时间
System.out.println(date);//Fri May 29 23:27:04 CST 2020
因为Date类型获取时间的方式存在千年虫的问题,也就是需要在需要在获取的年份+1900
在早期的计算机程序中规定的年份用两位数表示,也就是说,假如是1971年,在计算机里就会被表示为71,但是到了2000年的时候这个情况就出现了问题,
计算机就会将其年份表示为00。这样的话计算机内部对年份的计算就会出现问题。这个事情当时被称为千年虫
并且Date的很多方法都是过时的了,比如说:
所以我们不用Date来获取时间,但是我们用Date类型来创建时间
格林威治时间:Calendar
Calendar类是java.util包中提供的抽象类,从jdk1.1开始出现了,是Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理
Calendar常见的子类:java.util.GregorianCalendar;(既然是抽象类,我们需要通过子类来创建对象)
使用Calendar创建对象的两种方法:
(1) Calendar是抽象类,可以通过子类GregorianCalendar去创建对象:
Calendar cal=new GregorianCalendar();
(2)使用静态工厂方法获取对象
Calendar cal=Calendar.getInstance();
Calendar的设置修改日期的方法:
get():获取日历字段的值
set();设置日历字段的值
add();会自动进行调整
roll();添加时间量,只会在指定的字段进行调整
//创建Calendar对象
Calendar cal = Calendar.getInstance();
//输出时间
System.out.println(cal);
//获取现在时间
Date date = cal.getTime();
System.out.println(date);//输出当前时间
//获取年份,此种方式没有千年虫问题
System.out.println("年份为:"+cal.get(Calendar.YEAR));
//获取月份 月份从0开始
System.out.println("月份为:"+(cal.get(Calendar.MONTH)+1));
//获取一个月的某一天
System.out.println("日期为:"+cal.get(Calendar.DATE));
Calendar类中的方法较多,这里随便拿几个做例子,大家可以去查看api文档仔细看里面的方法进行使用
谢谢大家观看,咱们下期再见~~~~