2024年网络安全最全从零开始学Java62之时间相关的类有哪些?_at java(2),2024年最新2024年哔哩哔哩网络安全高级面试题及答案

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1. 简介

如果我们想在Java中获取当前的时间,可以使用 java.util.Date类java.util.Calendar类来实现。其中,Date类封装了系统的日期和时间信息,Calendar类则会根据系统的日历来填充Date对象。

java.util.Date是一个表示日期和时间的类,代表了系统特定的时间戳。它是按照UTC时间显示的,可以精确到毫秒,源码内部使用long类型进行时间的存储。我们要注意与java.sql.Date区分,后者是用在数据库中的类,且是按照本地时区显示的。Date对象表示的时间,其默认顺序是星期、月、日、小时、分、秒、年。

2. 构造方法

java.util.Date类给我们提供了多个构造方法,如下图所示:

在这里插入图片描述

但是一般在开发时,我们常用的也没有这么多,一般使用时如下形式:

● Date():创建Date对象并初始化,该对象可以获取本地的当前时间,该时间会精确到毫秒。

● Date(long date):构造一个Date对象,并接受一个从1970年1月1日起的毫秒数作为参数。

3. 常用API方法

当我们构造出来一个Date对象之后,就可以使用它的一些API方法进行时间的操作了,这些常用的API方法如下:

序号方法和描述
boolean after(Date date)若调用该方法的Date对象,在指定的日期之后,则返回true,否则返回false。
boolean before(Date date)若调用此方法的Date对象,在指定的日期之前,则返回true,否则返回false。
int compareTo(Date date)比较调用此方法的Date对象和指定的日期。若两者相等则返回0,若该对象在指定日期之前则返回负数,若该对象在指定日期之后则返回正数。
boolean equals(Object date)若调用该方法的Date对象,和指定日期相等时则返回true,否则返回false。
long getTime( )返回自1970年1月1日 00:00:00 GMT以来的毫秒数。
void setTime(long time)用从1970年1月1日00:00:00 以后的time毫秒数,设置时间和日期。
String toString( )把该Date对象转换成dow mon dd hh:mm:ss zzz yyyy格式的字符串,其中dow是指一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

4. 使用方法

4.1 基本使用

接下来我们先通过一个简单的案例,来演示一下Date的基本用法。

import java.util.Date;
public class Demo01 {

	public static void main(String[] args) {
		//获取当前时间的时间戳
		long currentTimeMillis = System.currentTimeMillis();
		System.out.println("时间戳="+currentTimeMillis);
		
		//获取当前时间对象
		Date date=new Date();
		//Sat Feb 11 12:04:03 IRKT 2023
		System.out.println("当前时间="+date);
		//转为字符串:Sat Feb 11 12:04:03 IRKT 2023
		System.out.println("当前时间="+date.toString());
		//转换为本地时区:2023年2月11日 下午12:04:03
		System.out.println("当前时间,Locale="+date.toLocaleString());
		//转换为GMT时区:11 Feb 2023 04:04:03 GMT
		System.out.println("当前时间,GMT="+date.toGMTString());
	}
}

如果我们想获取当前时间的时间戳,可以使用System.currentTimeMillis()方法。构造出Date对象之后,我们可以直接打印该对象,就能展示出当前时间,但是这个格式并不一定符合我们中国人的阅读习惯,后面我们可以对日期进行格式化操作。

4.2 其他用法

除了上面这些基本用法之外,Date还有其他的一些用法。

import java.util.Date;
public class Demo01 {

	public static void main(String[] args) {
		//获取当前时间对象
		Date date=new Date();
		//获取年月日
		System.out.println("年="+(date.getYear() + 1900)); // 必须加上1900
        System.out.println("月="+(date.getMonth() + 1)); // 0~11,必须加上1
        System.out.println("日="+date.getDate()); // 1~31,不能加1
        System.out.println("时="+date.getHours()); // 0~23
        System.out.println("分="+date.getMinutes()); // 0~59,不能加1
        System.out.println("秒="+date.getSeconds()); // 0~59,不能加1
        System.out.println("时间戳="+date.getTime()); // 时间戳,毫秒值
		
		//计算自己已经活了多少天,1990年01月31日
		//构造对象的另一个方法,已过时。year:要减去1900,月份从0开始,0-11;日期是1-31
        Date d1 =  new Date(1990-1900, 2-1, 31);
        Date d2 = new Date();
        long time = d2.getTime() - d1.getTime();
        System.out.println("已活天数="+time/1000/60/60/24);

        
	}
}

另外我们还要注意,getYear()方法返回的年份必须加上1900;getMonth()方法返回的月份是0-11,分别表示1-12月,所以要加1;而getDate()方法返回的日期范围是1~31,就不能加1。

在打印本地时区表示的日期和时间时,不同的计算机可能会有不同的展示结果,后面我们可以使用SimpleDateFormat设置出我们想要的日期时间格式。

4.3 统计时间差

有时候我们要统计某个功能的执行时间,此时就可以用该功能结束时的时间,减去开始时的时间,得到一个时间差,这就是该功能的执行时间。

import java.util.Date;

public class Demo03 {

	public static void main(String[] args) {
		//获取当前时间对象
		//开始时间
		Date startDate=new Date();
		
		for(int i=0;i<100000;i++) {
			System.out.println("循环次数"+i);
		}
        		
		//结束时间
		Date endDate=new Date();
		//计算时间差
        long time = endDate.getTime() - startDate.getTime();
        System.out.println("10w次循环的执行时间是 "+time+" 毫秒");
	}
	
}

三. Calendar日历类

1. 简介

Calendar类是Java时间类Date的扩展。

相比Date,它拥有更强大的功能,主要是多了可以做简单日期和时间运算的功能,且在实现方式上也比Date类更复杂一些。Calendar可以用来计算日期,比如说计算下个月的日期,或者两个月前的日期等。

Calendar类是一个抽象类,我们在实际使用时需要实现特定的子类,一般使用getInstance()方法创建即可。Calendar类有几个主要的子类,包括java.util.GregorianCalendar和java.util.TimeZone。其中GregorianCalendar类提供了标准的日历系统,可以用来计算未来或过去某天的日期。TimeZone类则可以用来在不同的时区之间,转换日期和时间。

2. Calendar常量字段

Calendar中有以下几个常用的常量字段,用于表示不同的意义。

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

3. Calendar常用方法

除了以上常用的常量字段之外,Calendar还有一些常用的方法,如下表所示:

方法描述
void add(int field, int amount)根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount
boolean after(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果
boolean before(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果
void clear()清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field)返回指定日历字段的值
int getActualMaximum(int field)返回指定日历字段可能拥有的最大值
int getActualMinimum(int field)返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek()获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance()使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone)使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone,Locale aLocale)使用指定时区和语言环境获得一个日历
Date getTime()返回一个表示此 Calendar 时间值(从格林威治时间1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位
void set(int field, int value)为指定的日历字段设置给定值
void set(int year, int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay,int minute, int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值

Calendar对象可以调用set()方法将日历翻到任何一个时间,当参数 year取负数时表示是公元前。调用 get()方法可以获取年、月、日等时间信息,field参数的值是前面讲过的Calendar静态常量。

4. 构建Calendar对象

Calendar类是抽象类,所以我们不能通过new的方式来构建Calendar对象。在实际使用时,我们一般是要实现特定的子类,经常是使用getInstance()方法进行创建。

import java.util.Calendar;

public class Demo04 {

	public static void main(String[] args) {
		//默认是当前日期
		Calendar c1 = Calendar.getInstance();
		System.out.println("c1="+c1);
		
		//创建一个代表2023年2月2日的Calendar对象
		Calendar c2 = Calendar.getInstance();
		c2.set(2023, 2-1, 2);
		System.out.println("c2="+c2);
	}
}

5. 获取当前时间

获取到Calendar对象之后,我们可以获取到当前日期对象的年月日时分秒等信息。

import java.util.Calendar;

public class Demo05 {

	public static void main(String[] args) {
		// 获取当前时间
        Calendar c = Calendar.getInstance();
        int y = c.get(Calendar.YEAR);
        //月份要加1
        int m = 1 + c.get(Calendar.MONTH);
        int d = c.get(Calendar.DAY_OF_MONTH);
        int w = c.get(Calendar.DAY_OF_WEEK);
        int hh = c.get(Calendar.HOUR_OF_DAY);
        int mm = c.get(Calendar.MINUTE);
        int ss = c.get(Calendar.SECOND);
        int ms = c.get(Calendar.MILLISECOND);
        //2023-2-11 7 18:10:59.847
        System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);
	}
}

我们要注意,Calendar是通过get()方法获取年月日等信息的,其中返回的年份不必转换,返回的月份仍要加1,返回的星期要特别注意,1~7分别表示周日、周一、……周六。

6. 设置时间

我们通过Calendar.getInstance()方法获取到Calendar对象后,获取到的其实就是当前时间。如果我们想设置某个特定的日期和时间,需要先用clear()方法清除掉之前所有的字段。

import java.util.Calendar;

public class Demo06 {

	public static void main(String[] args) {
		// 设置时间
        Calendar c = Calendar.getInstance();
        // 清除所有
        c.clear();
        // 设置2023年
        c.set(Calendar.YEAR, 2023);
        // 设置2月(0~11)
        c.set(Calendar.MONTH, 1);
        // 设置2日
        c.set(Calendar.DATE, 2);
        // 设置时间


### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料


网络安全面试题


![](https://img-blog.csdnimg.cn/img_convert/80674985176a4889f7bb130756893764.png)


绿盟护网行动


![](https://img-blog.csdnimg.cn/img_convert/9f3395407120bb0e1b5bf17bb6b6c743.png)


还有大家最喜欢的黑客技术


![](https://img-blog.csdnimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg)


**网络安全源码合集+工具包**


![](https://img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png)


![](https://img-blog.csdnimg.cn/img_convert/4a5f4281817dc4613353c120c9543810.png)

**所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值