时间日期类
-
计算机中时间原点
1970年1月1日 00:00:00
-
时间换算单位
1秒 = 1000毫秒
-
Date类概述
Date 代表了一个特定的时间,精确到毫秒
-
Date类构造方法
原因:
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。
随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。
1970年1月1日 算C语言的生日
long time = System.currentTimeMillis();System.out.println(time);//1575465416955
小结:
1,北京时间需要在世界标准时间上加8小时。
2,1秒=1000毫秒
3,计算机中的时间原点为:1970年1月1日 00:00:00
1.1 Date 类概述和构造方法
-
Date类概述
- Date 代表了一个特定的时间,精确到毫秒
-
Date类构造方法
方法名 | 说明 |
---|---|
public Date() | 创建一个Date对象,表示默认时间 |
public Date(long date) | 创建一个Date对象,表示指定时间 |
Date date1 = new Date();
把当前时间封装成一个Date对象
Date date2 = new Date(0L);
把从时间原点开始,过了指定毫秒的时间,封装成一个Date对象
需要考虑时差问题。
案例:示例代码
package com.itheima.mydate;
import java.util.Date;
public class DateDemo1 {
public static void main(String[] args) {
// public Date() 创建一个Date对象,表示默认时间
//public Date(long date) 创建一个Date对象,表示指定时间
//如果用空参构造创建对象 那么这个时间就表示电脑中的当前时间。
Date date1 = new Date();
System.out.println(date1);
//如果用有参构造创建对象 从计算机的时间原点开始,过了指定毫秒的那个时间。
Date date2 = new Date(0L);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
//从时间原点开始,过了0毫秒。
//因为我们是在中国,我们是在东八区需要+8小时。
//1970年1月1日 上午的9点
Date date3 = new Date(3600L * 1000);
System.out.println(date3);
}
}
1.2 Date 类的常用方法(应用)
- 常用方法
方法名 | 说明 |
---|---|
public long getTime() | 获取时间对象的毫秒值 |
public void setTime(long time) | 设置时间,传递毫秒值 |
package com.itheima.mydate;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo2 {
public static void main(String[] args) {
// public long getTime() 获取时间对象的毫秒值
// public void setTime(long time) 设置时间,传递毫秒值
//method1();
//method2();
}
private static void method2() {
//创建日期对象
Date date1 = new Date();
date1.setTime(0L);
System.out.println(date1);
}
private static void method1() {
//把当前时间封装成一个date对象
Date date1 = new Date();
//获取这个date对象的毫秒值 --- 获取当前时间的毫秒值
long time = date1.getTime();
System.out.println(time);
long time2 = System.currentTimeMillis();
System.out.println(time2);
}
}
1.3 SimpleDateFormat 类
- SimpleDateFormat类概述
-
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
-
我们重点学习日期格式化和解析
-
SimpleDateFormat 可以对Date对象,进行格式化和解析
常用的模式字母及对应关系如下:
y 年
M 月
d 日
H 时
m 分
s 秒
2020-11-11 13:27:06 yyyy-MM-dd HH:mm:ss
2020年11月11日 13:27:06 yyyy年MM月dd日 HH:mm:ss
- SimpleDateFormat 的构造方法
方法名 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
-
SimpleDateFormat类的常用方法
- 格式化(从Date到String)
- public final String format(Date date):将日期格式化成日期/时间字符串
- 解析(从String到Date)
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
- 格式化(从Date到String)
案例:格式化(从 Date 到 String )
package com.itheima.mydate;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo3 {
public static void main(String[] args) {
//当前时间的Date对象
Date date = new Date();
//创建了一个日期格式。 构造一个SimpleDateFormat,使用指定的格式
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//public final String format(Date date):将日期格式化成日期/时间字符串
String result1 = sdf.format(date);
System.out.println(result1);
}
}
案例:解析(从 String 到 Date )
package com.itheima.mydate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo4 {
public static void main(String[] args) throws ParseException {
//创建格式
String s = "2048-01-01";
//解析字符串的格式必须得要和的创建的格式一模一样 不然会报错
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//public Date parse(String source):从给定字符串的开始解析文本以生成日期
Date date = sdf.parse(s);
System.out.println(date);
}
}
案例:秒杀活动
-
需求
秒杀开始时间是2020年11月11日 00:00:00,结束时间是2020年11月11日 00:10:00,用户小贾下单时间是2020年11月11日 00:03:47,用户小皮下单时间是2020年11月11日 00:10:11,判断用户有没有成功参与秒杀活动
-
实现步骤
- 判断下单时间是否在开始到结束的范围内
- 把字符串形式的时间变成毫秒值
- 代码实现
package com.itheima.mydate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo5 {
public static void main(String[] args) throws ParseException {
//开始时间:2020年11月11日 0:0:0
//结束时间:2020年11月11日 0:10:0
//小贾2020年11月11日 0:03:47
//小皮2020年11月11日 0:10:11
//1.判断两位同学的下单时间是否在范围之内就可以了。
//2.要把每一个时间都换算成毫秒值。
String start = "2020年11月11日 0:0:0";
String end = "2020年11月11日 0:10:0";
String jia = "2020年11月11日 0:03:47";
String pi = "2020年11月11日 0:10:11";
//创建格式 构造一个SimpleDateFormat,使用默认格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//public Date parse(String source):从给定字符串的开始解析文本以生成日期
//public long getTime() 获取时间对象的毫秒值
//开始时间的毫秒值
long startTime = sdf.parse(start).getTime();
//结束时间的毫秒值
long endTime = sdf.parse(end).getTime();
//小贾下单并付款的毫秒值
long jiaTime = sdf.parse(jia).getTime();
//小皮单并付款的毫秒值
long piTime = sdf.parse(pi).getTime();
if(jiaTime >= startTime && jiaTime <= endTime){
System.out.println("小贾同学参加上了秒杀活动");
}else{
System.out.println("小贾同学没有参加上秒杀活动");
}
System.out.println("------------------------");
if(piTime >= startTime && piTime <= endTime){
System.out.println("小皮同学参加上了秒杀活动");
}else{
System.out.println("小皮同学没有参加上秒杀活动");
}
}
}
SimpleDateFormat 小结:
-
格式化(从 Date 到 String )
public final String format(Date date): 把时间按照固定格式进行展示 -
解析(从 String 到 Date )
public Date parse(String source):需要对时间进行计算