Date
//需求1 打印时间远点开始一年后的时间
extracted();
//需求2 定义任意两个date对象 比较那个时间在前 哪个在后
Random r=new Random();
Date date1=new Date(Math.abs(r.nextInt()));
Date date2=new Date(Math.abs(r.nextInt()));
System.out.println(date1);
System.out.println(date2);
if (date1.getTime()> date2.getTime()){
System.out.println("date1时间大");
}else{
System.out.println("date2时间大");
}
}
private static void extracted() {
//获取时间原点
Date d=new Date(0l);
//获取毫秒值
long time = d.getTime();
//获取一年的毫秒值
time=time+1000l*60*60*24*365;
d.setTime(time);
System.out.println(d);
小结
SimpleDateFormat
- 格式化:把时间变成我们喜欢的格式
- 解析:把字符串表示的时间变成Date对象(然后用getTime方法获取毫秒值)
//空参构造
SimpleDateFormat sdf1=new SimpleDateFormat();
//new出一个原点时间
Date d1=new Date();
//这个需要传入你要改变的时间
String str1 = sdf1.format(d1);
System.out.println(str1);//2023/10/12 下午12:51 空参构造默认模式
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EE");
//new出一个原点时间
Date d2=new Date();
//这个需要传入你要改变的时间
String str2 = sdf2.format(d2);
System.out.println(str2);
//2023-10-12 12:57:02 周四 周四 这是用带参构造生成的
格式化
//解析 parse 字符串获取日期对象
String s="2023-10-12 12:57:02";
SimpleDateFormat sdf3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf3.parse(s);
System.out.println(date.getTime());
//1697086622000 打印结果
解析
练习1
把2000-11-11 格式改为 2000年11月11日
String s="2000-11-11";
//解析
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(s);
//格式化
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd");
String s1 = sdf2.format(date);
System.out.println(s1);
练习2
//小假下单付款时间 2023年11月11号 0:01:00
//秒杀开始时间 2023年11月11号 0:0:0
//秒杀结束时间 2023年11月11号 0:10:0
String buy="2023年11月11号 0:11:00";
String start="2023年11月11号 0:0:0";
String end="2023年11月11号 0:10:0";
//解析得到 date对象
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd号 HH:mm:ss");
Date buyDate = sdf1.parse(buy);
Date startDate = sdf1.parse(start);
Date endDate = sdf1.parse(end);
//用对想得到毫秒值
if(buyDate.getTime()>=startDate.getTime()&&buyDate.getTime()<=endDate.getTime()){
System.out.println("秒杀成功");
}else{
System.out.println("秒杀失败");
}
Calendar
以往的知识把时间加一个月比较复杂 这时候这个Calendar就发挥了作用
import java.util.Calendar;
import java.util.Date;
public class api171 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();//日历类是一个抽象类 所以不能直接new出来 可以这样获取日历对象
//底层原理 他会把事件中的纪元 年月日分秒星期等都存在一个数组里
//细节二: 月份打印出来的范围是0到11 0相当于1月
//星期在老外眼中星期日相当于i星期一
//修改一下日历代表的事件
Date d=new Date(0l);//代表new出来一个事件是1970哪个
c.setTime(d);
System.out.println(c);
//getTimeMillis方法与上同理不做演示
//add方法第一个为类型 第二个为要加的数量
c.add(Calendar.MONTH,1);
//打印结果1970
//2
//1
//星期日
int year = c.get(Calendar.YEAR);
System.out.println(year);//单独获取年份
int month = c.get(Calendar.MONTH)+1;
System.out.println(month);
int date = c.get(Calendar.DAY_OF_MONTH);
System.out.println(date);//获取日期
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(getWeek(week));//获取是星期 但是是1234567这种形式 我们想要的是星期一这种形式 用一个方法实现
//1970
//1
//1
//星期四 打印结果
//第一个为要修改的类型 第二个为修改的结果
c.set(Calendar.YEAR,2000);
//2000
//1
//1
//星期四
//其他也是一样的方法
}
public static String getWeek(int index){
String arr[]={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
//0索引为空 因为0索引不用填写 1索引对应星期天. 是因为老外的星期一是 我们的星期天
return arr[index];
}
}