JDK7 时间
全世界的时间, 有一个统一的计算标准.
格林尼治时间/格林威治时间 (Greenwich Mean Time) 简称 GMT. 计算核心: 地球自转一天是 24 小时, 太阳直射时为正午 12 点. 后来发现计算误差较大, 现在格林威治时间已经不再作为标准时间来使用了.
到了 2012 年 1 月, 取消了用了将近 130 年的回归制标准时间. 现在, 标准时间是由原子钟来提供的.
原子钟: 利用铯原子的震动的频率计算出来的时间, 作为世界标准时间 (UTC)
铯原子每振动 9,192,631,770 次等于 1 秒钟. 这种计算方式是非常精准的, 2000 万年的误差为 1 秒钟.
中国位于东八区, 要在世界标准时间的基础上加 8 小时.
Date 类
Date 类是一个 JDK 写好的 Javabean 类, 用来描述时间, 精确到毫秒.
利用空参构造创建的对象, 默认表示操作系统当前时间.
利用有参构造创建的对象, 表示指定的时间.
程序示例:
import java.util.Date;public class demo1 {public static void main(String[] args) {/*public Date() 创建Date对象, 表示当前时间public Date(long date) 创建Date对象, 表示指定时间public void settime(long time) 设置/修改毫秒值public long gettime() 获取时间对象的毫秒值*/// 1.创建对象表示一个时间Date d1 = new Date();System.out.println(d1);// 2.创建对象表示一个指定的时间Date d2 = new Date(0L); // 从时间原点开始, 过了 0 毫秒的那个时间System.out.println(d2);// 3.settime 修改时间// 1000毫秒=1秒d2.setTime(1000L);System.out.println(d2);// 4.getTime获取当前时间的毫秒值long time = d2.getTime();System.out.println(time);}
}
程序示例:
import java.util.Date;
import java.util.Random;public class demo2 {public static void main(String[] args) {/*需求1:打印时间原点开始一年之后的时间需求2:定义任意两个Date对象, 比较一下哪个时间在前, 哪个时间在后*/// 需求2:定义任意两个Date对象, 比较一下哪个时间在前, 哪个时间在后Random r = new Random();// 创建两个时间对象Date d1 = new Date(Math.abs(r.nextInt()));Date d2 = new Date(Math.abs(r.nextInt()));long time1 = d1.getTime();long time2 = d2.getTime();if (time1 > time2) {System.out.println("第一个时间在后面, 第二个时间在前面");} else if (time1 < time2) {System.out.println("第二个时间在后面, 第一个时间在前面");} else {System.out.println("表示两个时间一样");}}private static void method() {// 需求1:打印时间原点开始一年之后的时间// 1.创建一个对象, 表示时间原点Date d1 = new Date(0L);// 2.获取d1时间的毫秒值long time = d1.getTime();// 3.在这个基础上我们要加一年的毫秒值即可time = time + 1000L * 60 * 60 * 24 * 365;// 4.把计算之后的时间毫秒值, 再设置回d1当中d1.setTime(time);// 5.打印d1System.out.println(d1);}
}
SimpleDateFormat 类
Date 类只能按照固定的格式打印时间, 而这个格式不符合一般的阅读习惯.
SimpleDateFormat 类的作用:
-
格式化: 把时间变成我们喜欢的格式.
-
解析: 把字符串表示的时间变成 Date 对象.
程序示例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class demo3 {public static void main(String[] args) throws ParseException {/*public simpleDateFormat() 默认格式public simpleDateFormat(String pattern) 指定格式public final string format(Date date) 格式化(日期对象 ->字符串)public Date parse(string source) 解析(字符串 ->日期对象)*/// 1.定义一个字符串表示时间String str = "2023-11-11 11:11:11";// 2.利用空参构造创建simpleDateFormat对象// 细节:// 创建对象的格式要跟字符串的格式完全一致SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse(str);// 3.打印结果System.out.println(date); // Sat Nov 11 11:11:11 CST 2023System.out.println(date.getTime()); // 1699672271000System.out.println("--------------------------------------------------------");method1();System.out.println("--------------------------------------------------------");}private static void method1() {// 1.利用空参构造创建simpleDateFormat对象, 默认格式SimpleDateFormat sdf1 = new SimpleDateFormat();Date d1 = new Date(0L);String str1 = sdf1.format(d1);System.out.println(str1); // 1970/1/1 上午8:00// 2.利用带参构造创建simpleDateFormat对象, 指定格式SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String str2 = sdf2.format(d1);System.out.println(str2); // 1970年01月01日 08:00:00// 课堂练习:yyyy年MM月dd日 时:分:秒 星期SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");String str3 = sdf3.format(d1);System.out.println(str3); // 1970年01月01日 08:00:00 周四}
}
程序示例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class demo4 {public static void main(String[] args) throws ParseException {/** 假设, 你初恋的出生年月日为:2000-11-11* 请用字符串表示这个数据, 并将其转换为:2000年11月11日** 创建一个Date对象表示2000年11月11日* 创建一个SimpleDateFormat对象, 并定义格式为年月日把时间变成:2000年11月11日*/// 1.可以通过2000-11-11进行解析, 解析成一个Date对象String str = "2000-11-11";// 2.解析SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf1.parse(str);// 3.格式化SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");String result = sdf2.format(date);System.out.println(result); // 2000年11月11日}
}
程序示例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class demo5 {public static void main(String[] args) throws ParseException {/** 需求:* 秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)* 秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)** 小贾下单并付款的时间为:2023年11月11日 0:01:0* 小皮下单并付款的时间为:2023年11月11日 0:11:0* 用代码说明这两位同学有没有参加上秒杀活动?*/// 1.定义字符串表示三个时间String startstr = "2023年11月11日 0:0:0";String endstr = "2023年11月11日 0:10:0";String orderstr = "2023年11月11日 0:01:00";// 2.解析上面的三个时间, 得到Date对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");Date startDate = sdf.parse(startstr);Date endDate = sdf.parse(endstr);Date orderDate = sdf.parse(orderstr);// 3.得到三个时间的毫秒值long startTime = startDate.getTime();long endTime = endDate.getTime();long orderTime = orderDate.getTime();// 4.判断if (orderTime >= startTime && orderTime <= endTime) {System.out.println("参加秒杀活动成功"); // 参加秒杀活动成功} else {System.out.println("参加秒杀活动失败");}}
}