发布时间:2023-08-07 12:30
CSDN话题挑战赛第1期
活动详情地址:话题团队PK赛5/9-5/22-CSDNhttps://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:Java学习记录
话题描述:每个人学习的路线不同,学习的方式视频教学和跟的老师不同,一个知识点会多种不同的讲解之法,下面这篇文章记录了我的学习记录并且我不懂或漏掉的知识点又去找其他书籍进行了补充,我觉得依旧不是最完整的,等我遇到了还会对这部分知识点进行补充。
目录
一、前言
二、第一代日期类
(1)Date类
(2)DateFormat类
(3)日期的表示方式
(4)DateFormat类的示例
(5)String 类转成 Date 类
三、第二代日期类
(1)Calendar类:
(2)代码示例
四、第三代日期类
1、前两代日期的不足
2、代码示例
3、Instant 时间戳
- 学习概述:本节主要是学习三代日期类,看日期类是如何一步一步优化的,并且熟悉常用的日期类的方法。
- 学习目标:我们需要掌握日期类的常用方法,在开发中会经常用到日期格式的转换的方法。
(1)Date类
Date类对象用来表示时间和日期,该类提供了一系列操作时间和日期各组成部分的方法。Date类中使用最多的是获取系统当前的日期和时间。如:Date date = new Date();这句代码是使用当前系统时间创建日期对象。
(2)DateFormat类
此类是格式化日期时间的类,它在Java.text 包下,是一个抽象类,提供了多种格式化和解析时间的方法。格式化是指将日期转换为文本,解析是指将文本转化成日期格式。使用比较多的是它的子类SimpleDateFormat,SimpleDateFormat类是一个以与语言环境有关的方式来格式化和解析日期的具体类,如:“yyyy-MM-dd HH:mm:ss” 就是指定的一种日期和时间的格式。
(3)日期的表示方式
(4)DateFormat类的示例
import java.text.SimpleDateFormat; import java.util.Date; public class csae2 { public static void main(String[] args) { Date date = new Date(); //获取当前时间 SimpleDateFormat mat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\"); //格式化 System.out.println(\"当前时间为:\" + mat.format(date)); //输出时间 } }
(5)String 类转成 Date 类
我们会想要把一个格式化的 String 转成对应的 Date ,当我们直接转换时,得到的Date 在输出时仍然是按照国外的形式,如果希望指定格式输出,需要使用 sdf 格式进行转换,并且需要和你给的 String 的格式一样,否则会抛出转换异常。
String s = \"1996 年 01 月 01 日 10:20:30 星期一\"; Date parse = sdf.parse(s); System.out.println(\"parse=\" + sdf.format(parse));
(1)Calendar类:
Calendar类也是用来操作日期和时间的类,它可以看作是Date类的加强版。Calendar提供了一组方法,允许把一个以毫秒为单位的时间转换成年、月、日、小时、分、秒。可以把Calendar当做是万年历,默认显示的是当前时间,当然也可以查看其他时间。
Calendar类是抽象类,可以通过静态方法getInstance()获得Calender类的对象,其实这个获得对象的是它的子类的对象。
▶▶该类提供的一些方法,如下:
▷ int get(int field):返回给定日历字段的值。
▷ YEAR:指示年
▷ MONTH:指示月
▷ DAY_OF_MONTH:指示一个月中的某天
▷ DAY_OF_WEEK:指示一个星期中的某天
▷ HOUR :指某天中的某时
▷ MINUTE :指某时中的某分
▷ SECOND : 指某分中的某秒
(2)代码示例
public class case1 { public static void main(String[] args) { Calendar time = Calendar.getInstance(); System.out.print(\"今天是\" + time.get(Calendar.YEAR) + \"年\"); //输出年 System.out.print( (time.get(Calendar.MONTH)+1) + \"月\"); //输出月 System.out.print(time.get(Calendar.DAY_OF_MONTH) + \"日\"); //输出日 System.out.println(\"小时:\" + time.get(Calendar.HOUR)); //小时 System.out.println(\"分钟:\" + time.get(Calendar.MINUTE)); //分钟 System.out.println(\"秒:\" + time.get(Calendar.SECOND)); //秒 System.out.println(); //输出星期 System.out.println(\"今天是星期\" + (time.get(Calendar.DAY_OF_WEEK)-1)); } }
♥ JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了、而Calendar也存在问题。
如:
▷ 可变性 : 像日期和时间这样的类应该是不可变的。
▷ 偏移性 : Date中的年份是从1900开始的,而月份都从0开始。
▷ 格式化 : 格式化只对Date有用,Calendar则不行。
▷ 此外,它们也不是线程安全的;不能处理闺秒等(每隔2天,多出1s)♥ JDK8加入新的日期表示方式:
LocalDate :只包含(日期/年月日),可以获取日期字段LocalTime :只包含(时间/时分秒), 可以获取时间字段
LocalDateTime :包含(日间/年月日时分秒),可以获取日期和时间字段♥ DateTimeFormatter 格式日期类:
DateTimeFormat pp = DateTimeFormatter.ofPattern(格式); Stirng str = pp.format(日期对象);
▶ 使用 now() 获取当前日期对象
//年月日时分秒 LocalDateTime p1 = LocalDateTime.now(); //年月日 LocalDate p2 = LocalDate.now(); //时分秒 LocalTime p3 = LocalTime.now();
▶ 使用 DateTimeFormatter 对象来进行格式化
LocalDateTime p = LocalDateTime.now(); // 创建 DateTimeFormatter 对象 DateTimeFormatter time = DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss\"); String format = time.format(p); System.out.println(\"格式化的日期=\" + format);
▶ 分别获取年、月、日、时、分、秒
LocalDateTime p = LocalDateTime.now(); System.out.println(\"年=\" + p.getYear()); System.out.println(\"月=\" + p.getMonth()); System.out.println(\"月=\" + p.getMonthValue()); System.out.println(\"日=\" + p.getDayOfMonth()); System.out.println(\"时=\" + p.getHour()); System.out.println(\"分=\" + p.getMinute()); System.out.println(\"秒=\" + p.getSecond());
▶ 用plus方法对时间进行加
LocalDateTime p = LocalDateTime.now(); //在当前日期上加366天 LocalDateTime loctime = p.plusDays(366); System.out.println(\"366天后=\" + dateTimeFormatter.format(loctime));
▶ 用minus方法对时间进行减
LocalDateTime p = LocalDateTime.now(); //在30000分钟前是什么时候 LocalDateTime loctime = p.minusMinutes(30000); System.out.println(\"30000分钟前的时间=\" + dateTimeFormatter.format(loctime));
▶ 什么是时间戳?
时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时间戳,以证明原始文件在签名时间之前已经存在。
可信时间戳是由联合信任时间戳服务中心签发的一个电子凭证,用于证明电子数据文件自申请可信时间戳后内容保持完整、未被更改。可信时间戳接入核准书的颁发,标志着可信时间戳在档案领域规范化应用已经开始,并将起到电子档案和档案数字化副本内容防篡改、保障档案的法律凭证的作用。根据《电子签名法》有关数据电文原件形式的要求,申请了可信时间戳认证的电子文件、电子档案或纸质档案的数字化副本等可视为法规规定的原件形式。(来源百度文库)▶ 获取时间戳的对象
//通过 静态方法 now() 获取 Instant now = Instant.now();
▶ Instant 和 Date相互转换
Instant n = Instant.now(); //Instant --> Date Date d = Date.from(n); //Date - > nstant Instant in = d.tolnstant();