《2022年java学习笔记 .pdf》由会员分享,可在线阅读,更多相关《2022年java学习笔记 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习好资料欢迎下载9.6 java.util包java.util 包是 Java语言提供的工具类包,该包中包含了如日期、随机数和数据结构实现类等一系列的工具类实现,是学习Java语言的基础包之一。本部分就以 Java语言中常用的时间和日期处理、随机数处理以及集合框架为基础进行介绍。9.6.1 时间和日期处理使用程序进行时间和日期处理,是程序员必须的一种常用技能,在不同的程序设计语言中提供了不同的格式进行实现,现在就介绍一下Java语言中的实现方式,以及基本的应用,使得对于Java语言的时间和日期处理技术有比较全面的认识。在程序中,某个固定的时间代表的都是一个时间点,也就是一个时间的瞬间,例如
2、2009 年 3 月 8 日 15 点 50 分 0 秒,在实际的应用中,经常需要对于两个时间进行比较或计算时间之间的差值,这些功能在Java语言中都可以很方便的实现。在 Java语言中,时间的表达单位是毫秒。也就是说,Java语言中的时间处理可以精确到毫秒。在 Java语言中,表达时间的方式有两种:a、绝对时间。以直观的形式来表达某个时间点,例如2009 年 10 月 10 号0 点 0 分 0 秒。使用这种形式表达时间,使用起来比较直观,但是不方便进行时间之间的计算。例如无法很直观的计算2020 年 1 月 1 号 0 点 0 分 0 秒和上面这个时间之间相差多少天。绝对时间以对象的形式进
3、行表达,Java API 中提供了 java.util 包中的 Date 类和 Calendar类的对象进行表达。b、相对时间。以一个 long 型的数字表达某个时间点。 例如 102847423468。使用这种方式的优缺点和绝对时间刚好相反。这种方式很方便时间之间的计算,但是阅读起来很不直观。在Java API 中以需要表达的时间点,例如2009年 10 月 10 号 0 点 0 分 0 秒,和 GMT(格林威治时间,也就是伦敦时间)1970年 1 月 1 号 0 点 0 分 0 秒之间相差的毫秒数作为相对时间的数值,如果该时间在这个时间只好,则相对时间为正数,否则相对时间为负数。Java
4、API中提供了 java.lang包中的 System类的 currentTimeMillis 方法,获得以相对时间形式描述的当前系统时间。在实际使用时,绝对时间和相对时间之间可以很方便的进行转换。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载9.6.1.1 Date 类在 JDK1.0中,Date 类是唯一的一个代表时间的类,但是由于Date 类不便于实现国际化,所以从JDK1.1版本开始
5、,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用 Date 类代表当前系统时间Date d = new Date();System.out.println(d);使用 Date 类的默认构造方法创建出的对象就代表当前时间,由于Date 类覆盖了 toString 方法,所以可以直接输出Date 类型的对象,显示的结果如下:Sun Mar 08 16:35:58 CST 2009在该格式中,Sun代表 Sunday( 周日), Mar 代表 March(三月), 08 代表 8 号,CST代表 China Standard Time( 中国标准时间,也就
6、是北京时间(东八区 )。2、使用 Date 类代表指定的时间Date d1 = new Date(2009-1900,3-1,9);System.out.println(d1);使用带参数的构造方法,可以构造指定日期的Date 类对象, Date 类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。例如上面的示例代码代表就是2009 年 3 月 9 号。实际代表具体的年月日时分秒的日期对象,和这个类似。3、获得 Date 对象中的信息Date d2 = new Date();/ 年份int year = d2.getYear() + 1900;/ 月份int
7、month = d2.getMonth() + 1;/ 日期int date = d2.getDate();/ 小时int hour = d2.getHours();/ 分钟int minute = d2.getMinutes();/ 秒int second = d2.getSeconds();/ 星期几名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载int day = d2.getDay()
8、;System.out.println(年份: + year);System.out.println(月份: + month);System.out.println(日期: + date);System.out.println(小时: + hour);System.out.println(分钟: + minute);System.out.println(秒: + second);System.out.println(星期: + day);使用 Date 类中对应的 get 方法,可以获得 Date 类对象中相关的信息, 需要注意的是使用 getYear获得是 Date 对象中年份减去 1900
9、 以后的值,所以需要显示对应的年份则需要在返回值的基础上加上1900,月份类似。在 Date 类中还提供了 getDay方法,用于获得 Date 对象代表的时间是星期几, Date 类规定周日是 0,周一是 1,周二是 2,后续的依次类推。4、Date 对象和相对时间之间的互转Date d3 = new Date(2009-1900,3-1,10);long time = 1290876532190L;/ 将 Date 类的对象转换为相对时间long t = d3.getTime();System.out.println(t);/ 将相对时间转换为Date 类的对象Date d4 = new
10、Date(time);System.out.println(d4);使用 Date对象中的 getTime方法, 可以将 Date类的对象转换为相对时间,使用 Date 类的构造方法,可以将相对时间转换为Date 类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。9.6.1.2 Calendar类从 JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上, Calendar类的功能要比 Date 类强大很多,而且在实现方式上也比Date 类要复杂一些,下面就介绍一下Calendar类的使用。Calendar类是一个抽象类,在实际使用时实现特
11、定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。1、使用 Calendar类代表当前时间Calendar c = Calendar.getInstance();名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载由于 Calendar类是抽象类,且 Calendar类的构造方法是 protected 的,所以无法使用 Calendar类的构造方法来
12、创建对象, API中提供了 getInstance方法用来创建对象。使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类 toString 实现的没有 Date 类那么直观,所以直接输出Calendar类的对象意义不大。2、使用 Calendar类代表指定的时间Calendar c1 = Calendar.getInstance();c1.set(2009, 3 - 1, 9);使用 Calendar类代表特定的时间, 需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。set 方法的声明为:public final void set(in
13、t year,int month,int date)以上示例代码设置的时间为2009 年 3 月 9 日,其参数的结构和Date 类不一样。 Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。如果只设定某个字段,例如日期的值,则可以使用如下set 方法:public void set(int field,int value)在该方法中,参数field 代表要设置的字段的类型,常见类型如下:Calendar.YEAR 年份Calendar.MONTH 月份Calendar.DATE 日期Calendar.DAY_OF_MONTH 日期,和上面的字段完全
14、相同Calendar.HOUR 12 小时制的小时数Calendar.HOUR_OF_DAY24 小时制的小时数Calendar.MINUTE 分钟Calendar.SECOND 秒Calendar.DAY_OF_WEEK星期几后续的参数 value 代表,设置成的值。例如:c1.set(Calendar.DATE,10);该代码的作用是将c1 对象代表的时间中日期设置为10 号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。3、获得 Calendar类中的信息Calendar c2 = Calendar.getInstance();/ 年份int year = c2.get
15、(Calendar.YEAR);名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载/ 月份int month = c2.get(Calendar.MONTH) + 1;/ 日期int date = c2.get(Calendar.DATE);/ 小时int hour = c2.get(Calendar.HOUR_OF_DAY);/ 分钟int minute = c2.get(Calendar.M
16、INUTE);/ 秒int second = c2.get(Calendar.SECOND);/ 星期几int day = c2.get(Calendar.DAY_OF_WEEK);System.out.println(年份: + year);System.out.println(月份: + month);System.out.println(日期: + date);System.out.println(小时: + hour);System.out.println(分钟: + minute);System.out.println(秒: + second);System.out.println(
17、星期: + day);使用 Calendar类中的 get 方法可以获得 Calendar对象中对应的信息, get方法的声明如下:public int get(int field)其中参数 field 代表需要获得的字段的值,字段说明和上面的set 方法保持一致。 需要说明的是,获得的月份为实际的月份值减1, 获得的星期的值和Date类不一样。在 Calendar类中,周日是 1,周一是 2,周二是 3,依次类推。4、其它方法说明其实 Calendar类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。a、add 方法public abstract void add(int f
18、ield,int amount)该方法的作用是在 Calendar对象中的某个字段上增加或减少一定的数值,增加是 amount 的值为正,减少时amount 的值为负。例如在计算一下当前时间100 天以后的日期,代码如下:Calendar c3 = Calendar.getInstance();c3.add(Calendar.DATE, 100);int year1 = c3.get(Calendar.YEAR);名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5
19、页,共 9 页 - - - - - - - - - 学习好资料欢迎下载/ 月份int month1 = c3.get(Calendar.MONTH) + 1;/ 日期int date1 = c3.get(Calendar.DATE);System.out.println(year1 + 年 + month1 + 月 + date1 + 日);这里 add 方法是指在 c3对象的 Calendar.DATE ,也就是日期字段上增加 100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期,例如程序的输出结果可能为:2009 年 6 月 17 日b、after 方法publi
20、c boolean after(Object when)该方法的作用是判断当前日期对象是否在when 对象的后面,如果在when 对象的后面则返回 true,否则返回 false。例如:Calendar c4 = Calendar.getInstance();c4.set(2009, 10 - 1, 10);Calendar c5 = Calendar.getInstance();c5.set(2010, 10 - 1, 10);boolean b = c5.after(c4);System.out.println(b);在该示例代码中对象c4代表的时间是 2009年 10 月 10 号,对象
21、 c5 代表的时间是 2010 年 10 月 10 号, 则对象 c5 代表的日期在 c4代表的日期之后,所以 after 方法的返回值是 true。另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。c、getTime方法public final Date getTime()该方法的作用是将 Calendar类型的对象转换为对应的Date 类对象,两者代表相同的时间点。类似的方法是 setTime,该方法的作用是将Date 对象转换为对应的Calendar对象,该方法的声明如下:public final void setTime(Date date)转换的
22、示例代码如下:Date d = new Date();Calendar c6 = Calendar.getInstance();/Calendar 类型的对象转换为Date对象Date d1 = c6.getTime();名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载/Date 类型的对象转换为Calendar对象Calendar c7 = Calendar.getInstance();c7
23、.setTime(d);5、Calendar对象和相对时间之间的互转Calendar c8 = Calendar.getInstance();long t = 1252785271098L;/ 将 Calendar对象转换为相对时间long t1 = c8.getTimeInMillis();/ 将相对时间转换为Calendar对象Calendar c9 = Calendar.getInstance();c9.setTimeInMillis(t1);在转换时,使用 Calendar类中的 getTimeInMillis 方法可以将 Calendar对象转换为相对时间。在将相对时间转换为 Cal
24、endar对象时, 首先创建一个 Calendar对象,然后再使用Calendar类的 setTimeInMillis 方法设置时间即可。9.6.1.3 应用示例下面以两个简单的示例介绍时间和日期处理的基本使用。1、计算两个日期之间相差的天数例如计算 2010 年 4 月 1 号和 2009 年 3 月 11 号之间相差的天数,则可以使用时间和日期处理进行计算。该程序实现的原理为:首先代表两个特定的时间点,这里使用Calendar的对象进行代表, 然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以 1 天的毫秒数 (24 小时 X60分钟 X60秒 X1000毫秒)即可
25、获得对应的天数。实现该示例的完整代码如下:import java.util.*;/* * 计算两个日期之间相差的天数 */public class DateExample1 public static void main(String args) / 设置两个日期/ 日期: 2009 年 3 月 11号Calendar c1 = Calendar.getInstance();c1.set(2009, 3 - 1, 11);/ 日期: 2010 年 4 月 1 号名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - -
26、- - - - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载Calendar c2 = Calendar.getInstance();c2.set(2010, 4 - 1, 1);/ 转换为相对时间long t1 = c1.getTimeInMillis();long t2 = c2.getTimeInMillis();/ 计算天数long days = (t2 - t1)/(24 * 60 * 60 * 1000);System.out.println(days);2、输出当前月的月历该示例的功能是输出当前系统时间所在月的日历,例如当
27、前系统时间是2009 年 3 月 10 日,则输出 2009 年 3 月的日历。该程序实现的原理为: 首先获得该月 1 号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果1 号是星期一,则打印一个单位的空格,如果1 号是星期二,则打印两个单位的空格,依次类推。打印完星期六的日期以后,进行换行。实现该示例的完整代码如下:import java.util.*;/* * 输出当前月的日历 */public class DateExample2public static void main(String args)/ 获得当前时间Calendar c = Calen
28、dar.getInstance();/ 设置代表的日期为 1 号c.set(Calendar.DATE,1);/ 获得 1 号是星期几int start = c.get(Calendar.DAY_OF_WEEK);/ 获得当前月的最大日期数int maxDay = c.getActualMaximum(Calendar.DATE); / 输出标题System.out.println(星期日 星期一 星期二 星期三星期四星期五星期六 );/ 输出开始的空格名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - -
29、- - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 学习好资料欢迎下载for(int i = 1;i start;i+)System.out.print( ); / 输出该月中的所有日期for(int i = 1;i = maxDay;i+)/ 输出日期数字System.out.print( + i);/ 输出分隔空格System.out.print( );if(i 10)System.out.print( );/ 判断是否换行if(start + i - 1) % 7 = 0)System.out.println(); / 换行System.out.println(); 关于时间和日期的处理就介绍这么多,更多的实现方法还需要根据具体问题进行对应的实现。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 9 页 - - - - - - - - -
限制150内