JAVA处理日期时间常用方法.docx

上传人:b****4 文档编号:7033423 上传时间:2023-05-11 格式:DOCX 页数:6 大小:20.69KB
下载 相关 举报
JAVA处理日期时间常用方法.docx_第1页
第1页 / 共6页
JAVA处理日期时间常用方法.docx_第2页
第2页 / 共6页
JAVA处理日期时间常用方法.docx_第3页
第3页 / 共6页
JAVA处理日期时间常用方法.docx_第4页
第4页 / 共6页
JAVA处理日期时间常用方法.docx_第5页
第5页 / 共6页
JAVA处理日期时间常用方法.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JAVA处理日期时间常用方法.docx

《JAVA处理日期时间常用方法.docx》由会员分享,可在线阅读,更多相关《JAVA处理日期时间常用方法.docx(6页珍藏版)》请在冰点文库上搜索。

JAVA处理日期时间常用方法.docx

JAVA处理日期时间常用方法

JAVA处理日期时间常用方法:

java.util.Calendar

Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日的00:

00:

00.000,格里高利历)的偏移量。

例:

Calendarcal=Calendar.getInstance()。

//使用默认时区和语言环境获得一个日历。

cal.add(Calendar.DAY_OF_MONTH,-1)。

//取当前日期的前一天.

cal.add(Calendar.DAY_OF_MONTH,+1)。

//取当前日期的后一天.

//通过格式化输出日期

java.text.SimpleDateFormatformat=newjava.text.SimpleDateFormat("yyyy-MM-dd")。

System.out.println("Todayis:

"+format.format(Calendar.getInstance().getTime()))。

System.out.println("yesterdayis:

"+format.format(cal.getTime()))。

得到2007-12-25日期:

Calendarcalendar=newGregorianCalendar(2007,11,25,0,0,0)。

Datedate=calendar.getTime()。

System.out.println("2007Christmasis:

"+format.format(date))。

//java月份是从0-11,月份设置时要减1.

//GregorianCalendar构造方法参数依次为:

年,月-1,日,时,分,秒.

取日期的部分:

intyear=calendar.get(Calendar.YEAR)。

intmonth=calendar.get(Calendar.MONTH)+1。

intday=calendar.get(Calendar.DAY_OF_MONTH)。

inthour=calendar.get(Calendar.HOUR_OF_DAY)。

intminute=calendar.get(Calendar.MINUTE)。

intseconds=calendar.get(Calendar.SECOND)。

取月份要加1.判断当前月份的最大天数:

Calendarcal=Calendar.getInstance()。

intday=cal.getActualMaximum(Calendar.DAY_OF_MONTH)。

System.out.println(day)。

java.util.Date

类Date表示特定的瞬间,精确到毫秒。

从JDK1.1开始,应该使用Calendar类实现日期和时间字段之间转换,使用DateFormat类来格式化和分析日期字符串。

Date中的相应方法已废弃。

尽管Date类打算反映协调世界时(UTC),但无法做到如此准确,这取决于Java虚拟机的主机环境。

当前几乎所有操作系统都假定1天=24×60×60=86400秒。

但对于UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。

闰秒始终作为当天的最后一秒增加,并且始终在12月31日或6月30日增加。

例如,1995年的最后一分钟是61秒,因为增加了闰秒。

大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。

在类Date所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:

年份y由整数y-1900表示。

∙月份由从0至11的整数表示;0是一月、1是二月等等;因此11是十二月。

∙日期(一月中的某天)按通常方式由整数1至31表示。

∙小时由从0至23的整数表示。

因此,从午夜到1a.m.的时间是0点,从中午到1p.m.的时间是12点。

∙分钟按通常方式由0至59的整数表示。

∙秒由0至61的整数表示;值60和61只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的Java实现中。

于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循ISOC的日期和时间约定。

在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为1月32日,并把它解释为2月1日的相同含义。

java.util.Datetoday=newjava.util.Date()。

System.out.println("Todayis"+formats.format(today))。

取当月的第一天:

java.text.SimpleDateFormatformat=newjava.text.SimpleDateFormat("yyyy-MM-01")。

java.util.DatefirstDay=newjava.util.Date()。

System.out.println("themonthfirstdayis"+formats.format(firstDay))。

取当月的最后一天:

Calendarcal=Calendar.getInstance()。

intmaxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH)。

java.text.Formatformatter3=newjava.text.SimpleDateFormat("yyyy-MM-"+maxDay)。

System.out.println(formatter3.format(cal.getTime()))。

求两个日期之间相隔的天数:

java.text.SimpleDateFormatformat=newjava.text.SimpleDateFormat("yyyy-MM-dd")。

java.util.DatebeginDate=format.parse("2007-12-24")。

java.util.DateendDate=format.parse("2007-12-25")。

longday=(date.getTime()-mydate.getTime())/(24*60*60*1000)。

System.out.println("相隔的天数="+day)。

一年前的日期:

java.text.Formatformatter=newjava.text.SimpleDateFormat("yyyy-MM-dd")。

java.util.DatetodayDate=newjava.util.Date()。

longbeforeTime=(todayDate.getTime()/1000)-60*60*24*365。

todayDate.setTime(beforeTime*1000)。

StringbeforeDate=formatter.format(todayDate)。

System.out.println(beforeDate)。

一年后的日期:

java.text.Formatformatter=newjava.text.SimpleDateFormat("yyyy-MM-dd")。

java.util.DatetodayDate=newjava.util.Date()。

longafterTime=(todayDate.getTime()/1000)+60*60*24*365。

todayDate.setTime(afterTime*1000)。

StringafterDate=formatter.format(todayDate)。

System.out.println(afterDate)。

求10小时后的时间

java.util.CalendarCal=java.util.Calendar.getInstance()。

Cal.setTime(dateOper)。

Cal.add(java.util.Calendar.HOUR_OF_DAY,10)。

System.out.println("date:

"+forma.format(Cal.getTime()))。

求10小时前的时间

java.util.CalendarCal=java.util.Calendar.getInstance()。

Cal.setTime(dateOper)。

Cal.add(java.util.Calendar.HOUR_OF_DAY,-10)。

System.out.println("date:

"+forma.format(Cal.getTime()))。

3.java.sql.Date

继承自java.util.Date,是操作数据库用的日期类型

一个包装了毫秒值的瘦包装器(thinwrapper),它允许JDBC将毫秒值标识为SQLDATE值。

毫秒值表示自1970年1月1日00:

00:

00GMT以来经过的毫秒数。

为了与SQLDATE的定义一致,由java.sql.Date实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。

java.sql.DatesqlDate=newjava.sql.Date(java.sql.Date.valueOf("2007-12-25").getTime())。

日期比较:

简单的比较可以以字符串的形式直接比较,也可使用

java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18"))方式来比较日期的大小.也可使用java.util.Date.after(java.util.Date)来比较.

4.java.util.GregorianCalendar

GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

GregorianCalendar是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家/地区是在1582年10月15日创立,在其他国家/地区要晚一些)。

可由调用方通过调用setGregorianChange()来更改起始日期。

历史上,在那些首先采用格里高利历的国家/地区中,1582年10月4日(儒略历)之后就是1582年10月15日(格里高利历)。

此日历正确地模拟了这些变化。

在开始格里高利历之前,GregorianCalendar实现的是儒略历。

格里高利历和儒略历之间的惟一区别就是闰年规则。

儒略历指定每4年就为闰年,而格里高利历则忽略不能被400整除的世纪年。

GregorianCalendar可实现预期的格里高利历和儒略历。

也就是说,可以通过在时间上无限地向后或向前外推当前规则来计算日期。

因此,对于所有的年份,都可以使用GregorianCalendar来生成有意义并且一致的结果。

但是,采用现代儒略历规则时,使用GregorianCalendar得到的日期只在历史上从公元4年3月1日之后是准确的。

在此日期之前,闰年规则的应用没有规则性,在45BC之前,甚至不存在儒略历。

在格里高利历创立以前,新年是3月25日。

为了避免混淆,此日历始终使用1月1日为新年。

如果想要格里高利历转换之前并且处于1月1日和3月24日之间的日期,则可以进行手动调整。

为WEEK_OF_YEAR字段所计算的值的范围从1到53。

一年的第一个星期始于getFirstDayOfWeek()的最早7天,至少包含该年的getMinimalDaysInFirstWeek()各天。

这取决于getMinimalDaysInFirstWeek()、getFirstDayOfWeek()的值以及1月1日是星期几。

一年的第一个星期和下一年的第一个星期之间的各个星期按顺序从2到52或53(根据需要)进行编号。

例如,1998年1月1日是星期四。

如果getFirstDayOfWeek()为MONDAY,并且getMinimalDaysInFirstWeek()为4(这些值反映了ISO8601和很多国家/地区标准),则1998年的第一个星期开始于1997年12月29日,结束于1998年1月4日。

但是,如果getFirstDayOfWeek()为SUNDAY,那么1998年的第一个星期开始于1998年1月4日,结束于1998年1月10日;1998年头三天是1997年第53个星期的一部分。

为WEEK_OF_MONTH字段所计算的值的范围从0到6。

一个月的第一个星期(WEEK_OF_MONTH=1的日期)是该月至少连续getMinimalDaysInFirstWeek()天中的最早日期,结束于getFirstDayOfWeek()的前一天。

与一年的第一个星期不同,一个月的第一个星期可能短于7天,也不必从getFirstDayOfWeek()这一天开始,并且不包括前一个月的日期。

在第一个星期之前该月日期的WEEK_OF_MONTH为0。

5.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)。

如果格式化多个日期,那么获得该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家/地区约定的信息了。

DateFormatdf=DateFormat.getDateInstance()。

for(inti=0。

i

++i){

   output.println(df.format(myDate[i])+"。

")。

}

要格式化不同语言环境的日期,可在getDateInstance()的调用中指定它。

DateFormatdf=DateFormat.getDateInstance(DateFormat.LONG,Locale.FRANCE)。

还可使用DateFormat进行分析。

myDate=df.parse(myString)。

使用getDateInstance来获得该国家/地区的标准日期格式。

另外还提供了一些其他静态工厂方法。

使用getTimeInstance可获得该国家/地区的时间格式。

使用getDateTimeInstance可获得日期和时间格式。

可以将不同选项传入这些工厂方法,以控制结果的长度(从SHORT到MEDIUM到LONG再到FULL)。

确切的结果取决于语言环境,但是通常:

∙SHORT完全为数字,如12.13.52或3:

30pm

∙MEDIUM较长,如Jan12,1952

∙LONG更长,如January12,1952或3:

30:

32pm

∙FULL是完全指定,如Tuesday,April12,1952AD或3:

30:

42pmPST。

如果愿意,还可以在格式上设置时区。

如果想对格式化或分析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获得的DateFormat强制转换为SimpleDateFormat。

这适用于大多数国家/地区;只是要记住将其放入一个try代码块中,以防遇到特殊的格式。

还可以使用借助ParsePosition和FieldPosition的分析和格式化方法形式来

∙逐步地分析字符串的各部分。

∙对齐任意特定的字段,或者找出字符串在屏幕上的选择位置。

6.java.text.SimpleDateFormat

SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类。

它允许进行格式化(日期->文本)、分析(文本->日期)和规范化。

SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。

但是,仍然建议通过DateFormat中的getTimeInstance、getDateInstance或getDateTimeInstance来新的创建日期-时间格式化程序。

每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式化程序。

可以根据需要使用applyPattern方法来修改格式模式。

有关使用这些方法的更多信息,请参阅DateFormat。

日期和时间模式

日期和时间格式由日期和时间模式字符串指定。

在日期和时间模式字符串中,未加引号的字母'A'到'Z'和'a'到'z'被解释为模式字母,用来表示日期或时间字符串元素。

文本可以使用单引号(')引起来,以免进行解释。

"''"表示单引号。

所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符'A'到'Z'和'a'到'z'都被保留):

模式字母通常是重复的,其数量确定其精确表示:

∙Text:

对于格式化来说,如果模式字母的数量大于或等于4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。

对于分析来说,两种形式都是可接受的,与模式字母的数量无关。

∙Number:

对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用0填充以达到此数量。

对于分析来说,模式字母的数量被忽略,除非必须分开两个相邻字段。

∙Year:

对于格式化来说,如果模式字母的数量为2,则年份截取为2位数,否则将年份解释为number。

对于分析来说,如果模式字母的数量大于2,则年份照字面意义进行解释,而不管数位是多少。

因此使用模式"MM/dd/yyyy",将"01/11/12"分析为公元12年1月11日。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2