目录
前言:
①Date类
②SimpleDateFormat类
③Calendar
前言:
时间和日期. 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分析,集群节点统一时间避免超时等。. 在时间和日期中有几个关键概念:. 日期:通常年月日的组合表示当前日期。. 时间:通常时分秒的组合表示当前时间。. 时区:世界各国家与地区经度不同,划分24个标准时区,相邻时区的时间相差一个小时。. 时间戳:从UTC时间的 1970-1-1 00:00:00 起到现在的总秒数。. 日期和时间的用法在系统中通常是获取时间和一些常见的计算与格式转换处理,在一些垮时区的业务中就会变的复杂很多,例如在电商业务中的全球贸易或者海淘等。
①Date类
1.概述:
Date类的对象在java中代表的是当前所在系统的此刻日期时间。
2.Date的构造器
3.Date的常用方法:
4.Date类记录时间的2种形式:
形式1:日期对象
形式2:时间毫秒值
指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的。
5.代码演示:
import java.util.Date;
/**
* Date类的对象在java中代表的是当前所在系统的此刻时间
* getTime 获取时间毫秒值
*/
public class Date_Test {
public static void main(String[] args) {
//1.创建一个Date类的对象,代表系统此刻日期对象
Date d = new Date();
System.out.println(d);
//2.获取时间毫秒值
long time = d.getTime();
System.out.println(time);
//public Date (long time) 把时间毫秒值转换成Date日期对象
//public void setTime(long time) 设置日期对象的时间为当前时间毫秒值对应的时间
System.out.println("------------");
//1、得到当前时间毫秒值
long d1 = System.currentTimeMillis();
System.out.println(d1);
//2、计算当前时间往后走1小时121秒
long time2 = System.currentTimeMillis();
time2 += (60*60*121)*1000;
//3、把时间毫秒值转换成对应的日期对象
Date d2 = new Date();
System.out.println(d2);
//
Date d3 = new Date();
d3.setTime(time2);
System.out.println(d3);
/** 一、日期对象创建获取毫秒值:
* 1、Date date = new Date();
* 2、Long time = date.getTime();
* 二、时间毫秒值恢复成日期对象:
* 1、Date d = new Date(time);
* 2、d.setTime(time);
*/
}
}
②SimpleDateFormat类
1.作用:
①可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。
②也可以把字符串的时间形式解析成日期对象。
2.代码演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* SimpleDateFormat
* 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式
* SimpleDateFormat的构造器 :
* 1、public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认格式
* 2、public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat,使用指定格式
* SimpleDateFormat的格式化方法:
* 1、public final String Format(Date date) 将时间格式化成日期/时间字符串
* 2、public final String Format(Object time) 将时间毫秒值格式化成日期/时间字符串
*/
public class SimpleDateFormat_Test {
public static void main(String[] args) throws ParseException {
//1、日期对象
Date d = new Date();
long time = d.getTime();
//2、格式化这个日期对象(指定格式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm :ss EEE a");
//3、开始格式化日期对象成为喜欢的字符串格式
String rs =sdf.format(d);
System.out.println(rs);
System.out.println("-----------------");
//4.格式化时间毫秒值
// 问 :输出121秒后的时间
long time1 = System.currentTimeMillis()+121*1000;
String rs1 = sdf.format(time1);
System.out.println(rs1);
System.out.println("---------解析时间------------");
/** 关键字: parse
* public Date parse(String source) 从给定字符串的开始解析文本生成日期
*/
//题:给定一个时间2021年08月06日 11:11:11 往后推两天14小时49分 06秒的时间
//1.把字符串时间拿到程序中
String datestr = "2021年08月06日 11:11:11";
//2.把字符串时间解析成日期对象(重点):形式必须与解析时间的形式完全一样,否则运行时解析报错
SimpleDateFormat sdf1 = new SimpleDateFormat("yyy年MM月dd日 HH:mm:ss");
Date d1 = sdf1.parse(datestr);
//3、往后推两天14小时49分 06秒的时间
long time2 = d.getTime()+(2l*24*60*60 +14*60*60 +49*60 +6)*1000;
//4、格式化这个时间毫秒值
System.out.println(sdf.format(time2));
}
}
3.练习题:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
//1.开始和结束时间
String startTime = "2021-11-11 00:00:00";
String endTime = "2021-11-11 00:10:00";
//2.小贾和小皮的时间
String xiaojia = "2021-11-11 00:03:47";
String xiaopi = "2021-11-11 00:10:11";
//3.解析小贾和小皮的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
Date d1 = sdf.parse(startTime);
Date d2 = sdf.parse(endTime);
Date d3 = sdf.parse(xiaojia);
Date d4 = sdf.parse(xiaopi);
if (d3.after(d1) && d3.before(d2)) {
System.out.println("小贾秒杀成功,可以发货");
}else {
System.out.println("小贾秒杀失败");
}
if (d4.after(d1) && d4.before(d2)) {
System.out.println("小皮秒杀成功,可以发货");
}else {
System.out.println("小皮秒杀失败");
}
}
}
③Calendar
1.概述:
①Calendar 代表了系统此刻日期对应的日历对象;
②Calendar 是一个抽象类,不能直接创建对象;
2.Calendar常用方法
3.代码演示:
import java.util.Calendar;
import java.util.Date;
/**Calendar **Calendar 是可变日期对象,一旦修改后其对象本身表示的对象将产生变化
* Calendar 代表了系统此刻日期对应的日历对象
* Calendar 是一个抽象类,不能直接创建对象
* 创建日历方法:
* public static Caldar getInstance() 获取当前日历对象
* Calendar 常用方法 :
* 1、public int get(int field) 取日期中某个字段信息
* 2、public void set (int field ,int value) 修改日历的某个字段信息
* 3、public void add(int field ,int amount) 为某个字段增加/减少指定的值
* 4、public final Date getTime() 拿到此刻日期对象
* 5、public long getTimeInMillis() 拿到此刻时间毫秒值
*/
public class Calendar_Test {
public static void main(String[] args) {
//1.拿到系统日历对象
Calendar cal = Calendar.getInstance();
System.out.println(cal);
//2、获取日历信息(public int get(int field))
int year = cal.get(Calendar.YEAR);
System.out.println(year);
int mm = cal.get(Calendar.MONTH);
System.out.println(mm);
int day = cal.get(Calendar.DAY_OF_YEAR);
System.out.println(day);
System.out.println("------------");
//3. 修改日历的某个字段信息(public void set (int field ,int value)) 一般不修改日历信息
// cal.set(Calendar.HOUR,12);
// System.out.println(cal);
//4.public void add(int field ,int amount) 为某个字段增加/减少指定的值
//查看64天后的时间
cal.add(Calendar.DAY_OF_YEAR,64);
System.out.println(cal);
//5.public final Date getTime() 拿到此刻日期对象
Date d = cal.getTime();
System.out.println(d);
//6.public long getTimeInMillis() 拿到此刻时间毫秒值
long time = cal.getTimeInMillis();
System.out.println(time);
}
}