Java日期时间使用总结.doc_第1页
Java日期时间使用总结.doc_第2页
Java日期时间使用总结.doc_第3页
Java日期时间使用总结.doc_第4页
Java日期时间使用总结.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java日期时间使用总结一、Java中的日期概述日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。在Java中,操作日期主要涉及到以下几个类:1、java.util.Date类 Date 表示特定的瞬间,精确到毫秒。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的把日期解释为年、月、日、小时、分钟和秒值的方法已废弃。2、java.text.DateFormat(抽象类)DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 - 文本)、分析(文本- 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。3、java.text.SimpleDateFormat(DateFormat的直接子类)SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 - 文本)、分析(文本 - 日期)和规范化。 SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。4、java.util.Calendar(抽象类) Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。 与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。5、java.util.GregorianCalendar(Calendar的直接子类) GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。 GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家是在 1582 年 10 月 15 日创立,在其他国家要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。二、java.util.Date的使用1、java.util.Date的API简介类 java.util.Date 表示特定的瞬间,精确到毫秒。提供了很多的方法,但是很多已经过时,不推荐使用,下面仅仅列出没有过时的方法:构造方法摘要-Date() 分配 Date 对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)。Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。方法摘要-boolean after(Date when) 测试此日期是否在指定日期之后。boolean before(Date when) 测试此日期是否在指定日期之前。Object clone() 返回此对象的副本。int compareTo(Date anotherDate) 比较两个日期的顺序。boolean equals(Object obj) 比较两个日期的相等性。long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。int hashCode() 返回此对象的哈希码值。void setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。String toString() 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。 dd 是一月中的某一天(01 至 31),显示为两位十进制数。 hh 是一天中的小时(00 至 23),显示为两位十进制数。 mm 是小时中的分钟(00 至 59),显示为两位十进制数。 ss 是分钟中的秒数(00 至 61),显示为两位十进制数。 zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。 yyyy 是年份,显示为 4 位十进制数。 下面是一个Date类的综合实例:importjava.util.Date;/* Created by IntelliJ IDEA.* User: leizhimin* Date: 2007-11-30* Time: 8:45:44* 日期测试*/publicclassTestDate publicstaticvoidmain(String args) TestDate nowDate =newTestDate();nowDate.getSystemCurrentTime();nowDate.getCurrentDate();/* * 获取系统当前时间 * System.currentTimeMillis()返回系统当前时间,结果为1970年1月1日0时0分0秒开始,到程序执行取得系统时间为止所经过的毫秒数 * 1秒1000毫秒 */publicvoidgetSystemCurrentTime() System.out.println(-获取系统当前时间-);System.out.println(系统当前时间 = + System.currentTimeMillis();/* * 通过Date类获取当前日期和当前时间 * date.toString()把日期转换为dow mon dd hh:mm:ss zzz yyyy */publicvoidgetCurrentDate() System.out.println(-获取系统当前日期-);/创建并初始化一个日期(初始值为当前日期)Date date =newDate();System.out.println(现在的日期是 = + date.toString();System.out.println(自1970年1月1日0时0分0秒开始至今所经历的毫秒数 = + date.getTime();运行结果:-获取系统当前时间-系统当前时间 = 1196413077278-获取系统当前日期-现在的日期是 = Fri Nov 30 16:57:57 CST 2007自1970年1月1日0时0分0秒开始至今所经历的毫秒数 = 1196413077278Process finished with exit code 02、java.text.DateFormat抽象类的使用DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 - 文本)、分析(文本- 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。DateFormat 可帮助进行格式化并分析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。要格式化一个当前语言环境下的日期,可使用某个静态工厂方法: myString = DateFormat.getDateInstance().format(myDate);如果格式化多个日期,那么获得该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家约定的信息了。DateFormat df = DateFormat.getDateInstance();for (int i = 0; i 文本)、分析(文本 - 日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式化程序。可以根据需要使用 applyPattern 方法来修改格式模式。有关使用这些方法的更多信息,请参阅 DateFormat。日期和时间模式日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 A 到 Z 和 a 到 z 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 () 引起来,以免进行解释。 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。定义了以下模式字母(所有其他字符 A 到 Z 和 a 到 z 都被保留):字母日期或时间元素表示示例GEra标志符TextADy年Year1996; 96M年中的月份MonthJuly; Jul; 07w年中的周数Number27W月份中的周数Number2D年中的天数Number189d月份中的天数Number10F月份中的星期Number2E星期中的天数TextTuesday; TueaAm/pm标记TextPMH一天中的小时数(0-23)Number0k一天中的小时数(1-24)Number24Kam/pm中的小时数(0-11)Number0ham/pm中的小时数(1-12)Number12m小时中的分钟数Number30s分钟中的秒数Number55S毫秒数Number978z时区General time zonePacific Standard Time; PST; GMT-08:00Z时区RFC 822 time zone-0800更多的参考信息可以查看JDK API文档,下面给出一个综合实例:importjava.util.Date;importjava.util.Locale;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;/* Created by IntelliJ IDEA.* User: leizhimin* Date: 2007-11-30* Time: 11:20:58* To change this template use File | Settings | File Templates.*/publicclassTestSimpleDateFormat publicstaticvoidmain(String args)throwsParseException TestSimpleDateFormat test =newTestSimpleDateFormat();test.testDateFormat();publicvoidtestDateFormat()throwsParseException /创建日期Date date =newDate();/创建不同的日期格式DateFormat df1 = DateFormat.getInstance();DateFormat df2 =newSimpleDateFormat(yyyy-MM-dd hh:mm:ss EE);DateFormat df3 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);/产生一个指定国家指定长度的日期格式,长度不同,显示的日期完整性也不同DateFormat df4 =newSimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒 EE, Locale.CHINA);DateFormat df5 =newSimpleDateFormat(yyyy-MM-dd hh:mm:ss EEEEEE, Locale.US);DateFormat df6 =newSimpleDateFormat(yyyy-MM-dd);DateFormat df7 =newSimpleDateFormat(yyyy年MM月dd日);/将日期按照不同格式进行输出System.out.println(-将日期按照不同格式进行输出-);System.out.println(按照Java默认的日期格式,默认的区域: + df1.format(date);System.out.println(按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域:+ df2.format(date);System.out.println(按照日期的FULL模式,区域设置为中文: + df3.format(date);System.out.println(按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : + df4.format(date);System.out.println(按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国: + df5.format(date);System.out.println(按照指定格式 yyyy-MM-dd ,系统默认区域: + df6.format(date);/将符合该格式的字符串转换为日期,若格式不相配,则会出错Date date1 = df1.parse(07-11-30 下午2:32);Date date2 = df2.parse(2007-11-30 02:51:07 星期五);Date date3 = df3.parse(2007年11月30日 星期五);Date date4 = df4.parse(2007年11月30日 02时51分18秒 星期五);Date date5 = df5.parse(2007-11-30 02:51:18 Friday);Date date6 = df6.parse(2007-11-30);System.out.println(-输出将字符串转换为日期的结果-);System.out.println(date1);System.out.println(date2);System.out.println(date3);System.out.println(date4);System.out.println(date5);System.out.println(date6);运行结果:-将日期按照不同格式进行输出-按照Java默认的日期格式,默认的区域: 07-11-30 下午5:04按照指定格式 yyyy-MM-dd hh:mm:ss EE ,系统默认区域:2007-11-30 05:04:10 星期五按照日期的FULL模式,区域设置为中文: 2007年11月30日 星期五按照指定格式 yyyy年MM月dd日 hh时mm分ss秒 EE ,区域为中文 : 2007年11月30日 05时04分10秒 星期五按照指定格式 yyyy-MM-dd hh:mm:ss EE ,区域为美国: 2007-11-30 05:04:10 Friday按照指定格式 yyyy-MM-dd ,系统默认区域: 2007-11-30-输出将字符串转换为日期的结果-Fri Nov 30 14:32:00 CST 2007Fri Nov 30 02:51:07 CST 2007Fri Nov 30 00:00:00 CST 2007Fri Nov 30 02:51:18 CST 2007Fri Nov 30 02:51:18 CST 2007Fri Nov 30 00:00:00 CST 2007Process finished with exit code 04、java.util.Calendar(抽象类)java.util.Calendar是个抽象类,是系统时间的抽象表示,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。一个Calendar的实例是系统时间的抽象表示,从Calendar的实例可以知道年月日星期月份时区等信息。Calendar类中有一个静态方法get(int x),通过这个方法可以获取到相关实例的一些值(年月日星期月份等)信息。参数x是一个产量值,在Calendar中有定义。Calendar中些陷阱,很容易掉下去:1、Calendar的星期是从周日开始的,常量值为0。2、Calendar的月份是从一月开始的,常量值为0。3、Calendar的每个月的第一天值为1。5、java.util.GregorianCalendar(Calendar的直接子类)GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。结合Calendar抽象类使用。下面给出一个综合实例看看Calendar类的用法:importjava.util.*;importjava.text.SimpleDateFormat;/* Created by IntelliJ IDEA.* User: leizhimin* Date: 2007-11-30* Time: 15:06:57* Calendar的使用测试*/publicclassTestCalendar publicstaticvoidmain(String args) TestCalendar testCalendar =newTestCalendar();testCalendar.testCalendar();publicvoidtestCalendar() /创建Calendar的方式Calendar now1 = Calendar.getInstance();Calendar now2 =newGregorianCalendar();Calendar now3 =newGregorianCalendar(2007, 10, 30);Calendar now4 =newGregorianCalendar(2007, 10, 30, 15, 55);/陷阱:Calendar的月份是011Calendar now5 =newGregorianCalendar(2007, 10, 30, 15, 55, 44);Calendar now6 =newGregorianCalendar(Locale.US);Calendar now7 =newGregorianCalendar(TimeZone.getTimeZone(GMT-8:00);/通过日期和毫秒数设置Calendarnow2.setTime(newDate();System.out.println(now2);now2.setTimeInMillis(newDate().getTime();System.out.println(now2);/定义日期的中文输出格式,并输出日期SimpleDateFormat df =newSimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒 E, Locale.CHINA);System.out.println(获取日期中文格式化化输出:+ df.format(now5.getTime();System.out.println();System.out.println(-通过Calendar获取日期中年月日等相关信息-);System.out.println(获取年:+ now5.get(Calendar.YEAR);System.out.println(获取月(月份是从0开始的):+ now5.get(Calendar.MONTH);System.out.println(获取日:+ now5.get(Calendar.DAY_OF_MONTH);System.out.println(获取时:+ now5.get(Calendar.HOUR);System.out.println(获取分:+ now5.get(Calendar.MINUTE);System.out.println(获取秒:+ now5.get(Calendar.SECOND);System.out.println(获取上午、下午:+ now5.get(Calendar.AM_PM);System.out.println(获取星期数值(星期是从周日开始的):+ now5.get(Calendar.DAY_OF_WEEK);System.out.println();System.out.println(-通用星期中文化转换-);String dayOfWeek = , 日, 一, 二, 三, 四, 五, 六;System.out.println(now5对象的星期是:+ dayOfWeeknow5.get(Calendar.DAY_OF_WEEK);System.out.println();System.out.println(-通用月份中文化转换-);String months = 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月;System.out.println(now5对象的月份是: + monthsnow5.get(Calendar.MONTH);运行结果:java.util.GregorianCalendartime=1196414388324,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfoid=Asia/Shanghai,offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论