【Java精品源码栏目提醒】:网学会员,鉴于大家对Java精品源码十分关注,论文会员在此为大家搜集整理了“Java语言中的时间和日期处理相关的代码实现 - 其它资料”一文,供大家参考学习!
Java 语言中的时间和日期处理相关的代码实现
java.util 包
java.util 包是
Java 语言提供的工具类包,该包中包含了如日期、随机数和数据结构实现类等一系列的工具类实现,是学习
Java 语言的基础包之一。
本部分就以
Java 语言中常用的时间和日期处理、随机数处理以及集合框架为基础进行介绍。
时间和日期处理 使用程序进行时间和日期处理,是程序员必须的一种常用技能,在不同的程序设计语言中提供了不同的格式进行实现,现在就介绍一下
Java 语言中的实现方式,以及基本的应用,使得对于
Java 语言的时间和日期处理技术有比较全面的认识。
在程序中,某个固定的时间代表的都是一个时间点, 也就是一个时间的瞬间,例如 2009 年 3 月 8 日 15 点 50 分 0 秒,在实际的应用中,经常需要对于两个时间进行比较或计算时间之间的差值,这些功能在
Java 语言中都可以很方便的实现。
在
Java 语言中,时间的表达单位是毫秒。
也就是说,
Java 语言中的时间处理可以精确到毫秒。
在
Java 语言中,表达时间的方式有两种: a、绝对时间。
以直观的形式来表达某个时间点,例如 2009 年 10 月 10 号0 点 0 分 0 秒。
使用这种形式表达时间,使用起来比较直观,但是不方便进行时间之间的计算。
例如无法很直观的计算 2020 年 1 月 1 号 0 点 0 分 0 秒和上面这个时间之间相差多少天。
绝对时间以对象的形式进行表达,
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 API 中提供了
java.lang包中的 System 类的 currentTimeMillis 方法,获得以相对时间形式描述的当前系统时间。
在实际使用时,绝对时间和相对时间之间可以很方便的进行转换。
Date 类 在 JDK1.0 中,Date 类是唯一的一个代表时间的类,但是由于 Date 类不便于实现国际化,所以从 JDK1.1 版本开始,推荐使用 Calendar 类进行时间和日期处理。
这里简单介绍一下 Date 类的使用。
1、使用 Date 类代表当前系统时间 Date d new Date System.out.printlnd 使用 Date 类的默认构造方法创建出的对象就代表当前时间,由于 Date 类覆盖了 toString 方法,所以可以直接输出 Date 类型的对象,显示的结果如下: Sun Mar 08 16:35:58 CST 2009 在该格式中,Sun 代表 Sunday周日,Mar 代表 March三月,08 代表 8号,CST 代表 China Standard Time中国标准时间,也就是北京时间东八区。
2、使用 Date 类代表指定的时间 Date d1 new Date2009-19003-19 System.out.printlnd1 使用带参数的构造方法,可以构造指定日期的 Date 类对象,Date 类中年份的参数应该是实际需要代表的年份减去 1900,实际需要代表的月份减去 1 以后的值。
例如上面的示例代码代表就是 2009 年 3 月 9 号。
实际代表具体的年月日时分秒的日期对象,和这个类似。
3、获得 Date 对象中的信息 Date d2 new Date //年份 int year d2.getYear 1900 //月份 int month d2.getMonth 1 //日期 int date d2.getDate //小时 int hour d2.getHours //分钟 int minute d2.getMinutes //秒 int second d2.getSeconds //星期几 int day d2.getDay 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 以后的值,所以需要显示对应的年份则需要在返回值的基础上加上 1900,月份类似。
在 Date 类中还提供了 getDay 方法,用于获得 Date 对象代表的时间是星期几,Date 类规定周日是 0,周一是 1,周二是 2,后续的依次类推。
4、Date 对象和相对时间之间的互转 Date d3 new Date2009-19003-110 long time 1290876532190L //将 Date 类的对象转换为相对时间 long t d3.getTime System.out.printlnt //将相对时间转换为 Date 类的对象 Date d4 new Datetime System.out.printlnd4 使用 Date 对象中的 getTime 方法,可以将 Date 类的对象转换为相对时间,使用 Date 类的构造方法,可以将相对时间转换为 Date 类的对象。
经过转换以后,既方便了时间的计算,也使时间显示比较直观了。
Calendar 类 从 JDK1.1 版本开始,在处理日期和时间时,系统推荐使用 Calendar 类进行实现。
在设计上,Calendar 类的功能要比 Date 类强大很多,而且在实现方式上也比 Date 类要复杂一些,下面就介绍一下 Calendar 类的使用。
Calendar 类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance 方法创建即可。
1、使用 Calendar 类代表当前时间 Calendar c Calendar.getInstance 由于 Calendar 类是抽象类,且 Calendar 类的构造方法是 protected 的,所以无法使用 Calendar 类的构造方法来创建对象,API 中提供了 getInstance 方法用来创建对象。
使用该方法获得的 Calendar 对象就代表当前的系统时间,由于 Calendar 类toString 实现的没有 Date 类那么直观,所以直接输出 Calendar 类的对象意义不大。
2、使用 Calendar 类代表指定的时间 Calendar c1 Calendar.getInstance c1.set2009 3 - 1 9 使用 Calendar 类代表特定的时间,需要首先创建一个 Calendar 的对象,然后再设定该对象中的年月日参数来完成。
set 方法的声明为: public final void setintyearintmonthint date 以上示例代码设置的时间为 2009 年 3 月 9 日,其参数的结构和 Date 类不一样。
Calendar 类中年份的数值直接书写,月份的值为实际的月份值减 1,日期的值就是实际的日期值。
如果只设定某个字段,例如日期的值,则可以使用如下 set 方法: public void setintfieldint value 在该方法中,参数 field 代表要设置的字段的类型,常见类型如下: Calendar.YEAR——年份 Calendar.MONTH——月份 Calendar.DATE——日期 Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同 Calendar.HOUR——12 小时制的小时数 Calendar.HOUR_OF_DAY——24 小时制的小时数 Calendar.MINUTE——分钟 Calendar.SECOND——秒 Calendar.DAY_OF_WEEK——星期几 后续的参数 value 代表,设置成的值。
例如: c1.setCalendar.DATE10 该代码的作用是将 c1 对象代表的时间中日期设置为 10 号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。
3、获得 Calendar 类中的信息 Calendar c2 Calendar.getInstance //年份 int year c2.getCalendar.YEAR //月份 int month c2.getCalendar.MONTH 1 //日期 int date c2.getCalendar.DATE //小时 int hour c2.getCalendar.HOUR_OF_DAY //分钟 int minute c2.getCalendar.MINUTE //秒 int second c2.getCalendar.SECOND //星期几 int day c2.getCalendar.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星期: day 使用 Calendar 类中的 get 方法可以获得 Calendar 对象中对应的信息,get方法的声明如下: publicint getint field 其中参数 field 代表需要获得的字段的值,字段说明和上面的 set 方法保持一致。
需要说明的是,获得的月份为实际的月份值减 1,获得的星期的值和 Date类不一样。
在 Calendar 类中,周日是 1,周一是 2,周二是 3,依次类推。
4、其它方法说明 其实 Calendar 类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。
a、add 方法 public abstract void addintfieldint amount 该方法的作用是在 Calendar 对象中的某个字段上增加或减少一定的数值,增加是 amount 的值为正,减少时 amount 的值为负。
例如在计算一下当前时间 100 天以后的日期,代码如下: Calendar c3 Calendar.getInstance c3.addCalendar.DATE 100 int year1 c3.getCalendar.YEAR //月份 int month1 c3.getCalendar.MONTH 1 //日期 int date1 c3.getCalendar.DATE System.out.printlnyear1 年 month1 月 date1 日 这里 add 方法是指在 c3 对象的 Calendar.DATE,也就是日期字段上增加 100,类内部会重新计算该日期对象中其它各字段的值, 从而获得 100 天以后的日期,例如程序的输出结果可能为: 2009 年 6 月 17 日 b、after 方法 publicboolean afterObject when 该方法的作用是判断当前日期对象是否在 when 对象的后面,如果在 when对象的后面则返回 true,否则返回 false。
例如: Calendar c4 Calendar.getInstance c4.set2009 10 - 1 10 Calendar c5 Calendar.getInstance c5.set2010 10 - 1 10 boolean b c5.afterc4 System.out.printlnb 在该示例代码中对象 c4 代表的时间是 2009 年 10 月 10 号,对象 c5 代表的时间是 2010 年 10 月 10 号,则对象 c5 代表的日期在 c4 代表的日期之后,所以after 方法的返回值是 true。
另外一个类似的方法是 before,该方法是判断当前日期对象是否位于另外一个日期对象之前。
c、getTime 方法 public final Date getTime 该方法的作用是将 Calendar 类型的对象转换为对应的 Date 类对象,两者代表相同的时间点。
类似的方法是 setTime,该方法的作用是将 Date 对象转换为对应的 Calendar对象,该方法的声明如下: public final void setTimeDate date 转换的示例代码如下: Date d new Date Calendar c6 Calendar.getInstance //Calendar 类型的对象转换为 Date 对象 Date d1 c6.getTime //Date 类型的对象转换为 Calendar 对象 Calendar c7 Calendar.getInstance c7.setTimed 5、Calendar 对象和相对时间之间的互转 Calendar c8 Calendar.getInstance long t 1252785271098L //将 Calendar 对象转换为相对时间 long t1 c8.getTimeInMillis //将相对时间转换为 Calendar 对象 Calendar c9 Calendar.getInstance c9.setTimeInMillist1 在转换时,使用 Calendar 类中的 getTimeInMillis 方法可以将 Calendar 对象转换为相对时间。
在将相对时间转换为 Calendar 对象时, 首先创建一个 Calendar对象,然后再使用 Calendar 类的 setTimeInMillis 方法设置时间即可。
应用示例 下面以两个简单的示例介绍时间和日期处理的基本使用。
1、计算两个日期之间相差的天数 例如计算 2010 年 4 月 1 号和 2009 年 3 月 11 号之间相差的天数,则可以使用时间和日期处理进行计算。
该程序实现的原理为:首先代表两个特定的时间点,这里使用 Calendar 的对象进行代表, 设为首页然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以 1 天的毫秒数24 小时 X60 分钟 X60 秒 X1000 毫秒即可获得对应的天数。
实现该示例的完整代码如下: importjava.util. / 计算两个日期之间相差的天数 / public class DateExample1 public static void mainString args //设置两个日期 //日期:2009 年 3 月 11 号 Calendar c1 Calendar.getInstance c1.set2009 3 - 1 11 //日期:2010 年 4 月 1 号 Calendar c2 Calendar.getInstance c2.set2010 4 - 1 1 //转换为相对时间 long t1 c1.getTimeInMillis long t2 c2.getTimeInMillis //计算天数 long days t2 - t1/24 60 60 1000 System.out.printlndays 2、输出当前月的月历 该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是2009 年 3 月 10 日,则输出 2009 年 3 月的日历。
该程序实现的原理为:首先获得该月 1 号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。
即如果 1 号是星期一,则打印一个单位的空格,如果 1 号是星期二,则打印两个单位的空格,依次类推。
打印完星期六的日期以后,进行换行。
实现该示例的完整代码如下: importjava.util. / 输出当前月的日历 / public class DateExample2 public static void mainString args //获得当前时间 Calendar c Calendar.getInstance //设置代表的日期为 1 号 c.setCalendar.DATE1 //获得 1 号是星期几 int start c.getCalendar.DAY_OF_WEEK //获得当前月的最大日期数 intmaxDay c.getActualMaximumCalendar.DATE //输出标题 System.out.println星期日星期一星期二星期三星期四星期五星期六//输出开始的空格forinti 1i