学习JAVA时间日期类最好的帖子.docx
- 文档编号:26209642
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:41
- 大小:25.11KB
学习JAVA时间日期类最好的帖子.docx
《学习JAVA时间日期类最好的帖子.docx》由会员分享,可在线阅读,更多相关《学习JAVA时间日期类最好的帖子.docx(41页珍藏版)》请在冰豆网上搜索。
学习JAVA时间日期类最好的帖子
一、Java中的日期概述
日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。
在Java中,操作日期主要涉及到一下几个类:
1、java.util.Date
类
Date
表示特定的瞬间,精确到毫秒。
从
JDK1.1
开始如何学习
java
,应该使用
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、OUR等
日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了
一些方法。
瞬间可用毫秒值来表示java学习笔记,它是距历元(即格林威治标准时间
1970年1月1日的00:
00:
00.000java学习笔记,格里高利历)的偏移量。
与其他语言环境敏感类一样,
一个通用的对象。
Calendar
的getInstance方法返回一个
Calendar
Calendar
提供了一个类方法getInstance,以获得此类型的
对象,其日历字段已由当前日期和时间初始化。
5、java.util.GregorianCalendar
(Calendar的直接子类)
GregorianCalendar
是Calendar
的一个具体子类java学习笔记,提供了世界上大多数国
家使用的标准日历系统。
GregorianCalendar
是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统
java学习笔记,
在默认情况下
java学习笔记,它对应格里高利日历创立时的格里高利历日期(某些国家是
在
1582年10
月15
日创立java
学习笔记,在其他国家要晚一些)。
可由调用方通过调用
setGregorianChange()
来更改起始日期。
二、java.util.Date的使用
1、java.util.Date的API简介
类java.util.Date
表示特定的瞬间,精确到毫秒。
提供了很多的方法,但是很多已经过时,不推荐使用,下面仅仅列出没有过时的方法:
构造方法摘要
-------------
Date()
分配Date对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(longdate)
分配
Date
对象并初始化此对象,以表示自从标准基准时间(称为“历元(
epoch)”java
学习笔记,即
1970
年
1
月
1
日
00:
00:
00GMT
)以来的指定毫秒数。
方法摘要
-------------
booleanafter(Datewhen)
测试此日期是否在指定日期之后。
booleanbefore(Datewhen)
测试此日期是否在指定日期之前。
Objectclone()
返回此对象的副本。
intcompareTo(DateanotherDate)
比较两个日期的顺序。
booleanequals(Objectobj)
比较两个日期的相等性。
longgetTime()
返回自1970年1月1日00:
00:
00GMT以来此Date对象表示的毫秒数。
inthashCode()
返回此对象的哈希码值。
voidsetTime(longtime)
设置此Date对象java学习笔记,以表示1970年1月1日00:
00:
00GMT以后time毫
秒的时间点。
StringtoString()
把此Date对象转换为以下形式的String:
dowmonddhh:
mm:
sszzzyyyy其中:
dow是一周中的某一天(Sun,Mon,Tue,Wed,Thujava学习笔记,Fri,Sat)。
mon是月份(Jan,Febjava学习笔记java学习笔记,Mar,Apr,May,Jun,Juljava
学习笔记,Aug,Sepjava学习笔记,Oct,Nov,
Dec)。
dd是一月中的某一天(01至31),显示为两位十进制数。
hh是一天中的小时(00至23),显示为两位十进制数。
mm是小时中的分钟(00至59)java学习笔记java学习笔记,显示为两位十进制数。
ss是分钟中的秒数(00至61),显示为两位十进制数。
zzz是时区(并可以反映夏令时)。
标准时区缩写包括方法parse识别的时区缩写。
如果
不提供时区信息,则zzz
为空java学习笔记,即根本不包括任何字符。
yyyy是年份,显示为4位十进制数。
下面是一个Date类的综合实例:
importjava.util.Date;
publicclassTestDate{
publicstaticvoidmain(Stringargs[]){
TestDatenowDate=newTestDate();
nowDate.getSystemCurrentTime();
nowDate.getCurrentDate();
}
publicvoidgetSystemCurrentTime(){
System.out.println("----
获取系统当前时间
----");
System.out.println("
系统当前时间
="+System.currentTimeMillis());
}
publicvoidgetCurrentDate(){
System.out.println("----
获取系统当前日期
----");
//创建并初始化一个日期(初始值为当前日期)
Datedate=newDate();
System.out.println("现在的日期是="+date.toString());
System.out.println("自1970年1月1日0时0分0秒开始至今所经历的毫秒数="+
date.getTime());
}
}
运行结果:
----获取系统当前时间----
系统当前时间=1196413077278
----获取系统当前日期----
现在的日期是=FriNov3016:
57:
57CST2007
自1970年1月1日0时0分0秒开始至今所经历的毫秒数=1196413077278
Processfinishedwithexitcode0
2、java.text.DateFormat抽象类的使用
DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或
时间。
日期/时间格式化子类(如
SimpleDateFormat)允许进行格式化(也就是日期->
文本)、分析(文本->日期)和标准化。
将日期表示为Date对象,或者表示为从
GMT(格林尼治标准时间)1970年java学习笔记java学习笔记java学习笔记,1月1日00:
00:
00这一刻开始的毫秒数。
DateFormat提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认
日期/时间
Formatter。
格式化风格包括FULL、LONG、MEDIUM和
SHORT。
方法描述中提供了使用这些风格的更多细节和示例。
DateFormat
可帮助进行格式化并分析任何语言环境的日期。
对于月、星期,甚至日历格式(阴历和阳历),
其代码可完全与语言环境的约定无关。
要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:
myString=DateFormat.getDateInstance().format(myDate);
如果格式化多个日期,那么获得该格式并多次使用它是更为高效的做法,这样系统就不必多
次获取有关环境语言和国家约定的信息了。
DateFormatdf=DateFormat.getDateInstance();
for(inti=0;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 , April12java 学习笔记, 1952AD 或 3: 30: 42pmPST 。 如果愿意,还可以在格式上设置时区。 如果想对格式化或分析施加更多的控制(或者给予用 户更多的控制),可以尝试将从工厂方法所获得的 DateFormat强制转换为SimpleDateFormat。 这适用于大多数国家;只是要记住将其放入一 个try 代码块中,以防遇到特殊的格式。 还可以使用借助ParsePosition 析字符串的各部分。 和 FieldPosition 的分析和格式化方法形式来: 逐步地分 对齐任意特定的字段,或者找出字符串在屏幕上的选择位置。 DateFormat不是同步的。 建议为每个线程创建独立的格式实例。 如果多个线程同时访问一 个格式,则它必须保持外部同步。 3、java.text.SimpleDateFormat(DateFormat的直接子类)的使用 SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类。 它允许 进行格式化(日期 ->文本)、分析(文本->日期)和规范化。 SimpleDateFormat记,仍然建议通过 使得可以选择任何用户定义的日期 DateFormat中的 -时间格式的模式。 但是 java 学习笔 getTimeInstance 、getDateInstance 或 getDateTimeInstance 来新的创建日期 -时间格式化程序。 每一个这样的类方法都能够返回一个以默认格式模式初 始化的日期/时间格式化程序。 可以根据需要使用 applyPattern方法来修改格式模式。 有关使用这些方法的更多信息,请参阅 DateFormat 。 日期和时间模式 日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,未加引号的 字母'A'到'Z'和'a'到'z' 被解释为模式字母,用来表示日期或时间字符串元素。 文本可以使用单引号(')引起来, 以免进行解释。 "''" 表示单引号。 所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者 在分析时与输入字符串进行匹配。 定义了以下模式字母(所有其他字符 字母日期或时间元素表示示例 GEra标志符TextAD 'A' 到 'Z' 和 'a' 到 'z' 都被保留): y年 Year1996;96 M年中的月份 MonthJuly;Jul;07 w年中的周数 Number27 W月份中的周数 Number2 D年中的天数 Number189 d月份中的天数 Number10 F月份中的星期Number2 E星期中的天数TextTuesday;Tue aAm/pm标记TextPM H一天中的小时数(0-23)Number0 k一天中的小时数(1-24)Number24 Kam/pm中的小时数(0-11)Number0 ham/pm中的小时数(1-12)Number12 m小时中的分钟数Number30 s分钟中的秒数Number55 S毫秒数Number978 zz时区GeneraltimezonePacificStandardTime;PST;GMT-08: 00Z时区RFC822timezone-0800 更多的参考信息可以查看JDKAPI文档,下面给出一个综合实例: importjava.util.Date; importjava.util.Locale; importjava.text.DateFormat; importjava.text.ParseException; importjava.text.SimpleDateFormat; publicclassTestSimpleDateFormat{ publicstaticvoidmain(Stringargs[])throwsParseException { TestSimpleDateFormattest=newTestSimpleDateFormat(); test.testDateFormat(); } publicvoidtestDateFormat()throwsParseException{ //创建日期 Datedate=newDate(); //创建不同的日期格式 DateFormatdf1=DateFormat.getInstance(); DateFormatdf2=newSimpleDateFormat("yyyy-MM-ddhh: mm: ss EE"); DateFormatdf3=DateFormat.getDateInstance(DateFormat.FULL , Locale.CHINA); //产生一个指定国家指定长度的日期格式 java 学习笔记,长度不同,显示 的日期完整性也不同 DateFormatdf4=newSimpleDateFormat("yyyy 年MM月 dd日 hh 时mm分ss 秒EE", Locale.CHINA); DateFormatdf5=newSimpleDateFormat("yyyy-MM-ddhh: mm: ssEEEEEE" , Locale.US); DateFormatdf6=newSimpleDateFormat("yyyy-MM-dd"); DateFormatdf7=newSimpleDateFormat("yyyy 年MM月 dd日"); //将日期按照不同格式进行输出 System.out.println("------- 将日期按照不同格式进行输出 ------"); System.out.println(" 按照Java默认的日期格式,默认的区域 : "+ df1.format(date)); System.out.println(" 按照指定格式yyyy-MM-ddhh: mm: ssEE ,系统默认区域 : "+ 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-ddhh: mm: ssEE,区域为美国: "+ df5.format(date)); System.out.println("按照指定格式yyyy-MM-dd,系统默认区域: "+ df6.format(date)); //将符合该格式的字符串转换为日期,若格式不相配,则会出错 Datedate1=df1.parse("07-11-30下午2: 32"); Datedate2=df2.parse("2007-11-3002: 51: 07星期五"); Datedate3=df3.parse("2007年11月30日星期五"); Datedate4=df4.parse("2007年11月30日02时51分18秒星期五 "); Datedate5=df5.parse("2007-11-3002: 51: 18Friday"); Datedate6=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-ddhh: mm: ssEE ,系统默认区域 : 2007-11-3005: 04: 10 星期五 按照日期的 FULL模式,区域设置为中文 : 2007 年11月30日星期五 按照指定格式yyyy年MM月dd日hh时mm分ss秒EEjava学习笔记,区域为中文: 2007 年11月30日05时04分10秒 星期五 按照指定格式 yyyy-MM-ddhh: mm: ssEE ,区域为美国 : 2007-11-3005: 04: 10 Friday 按照指定格式 yyyy-MM-dd ,系统默认区域 : 2007-11-30 -------输出将字符串转换为日期的结果 ------ FriNov3014: 32: 00CST2007 FriNov3002: 51: 07CST2007 FriNov3000: 00: 00CST2007 FriNov3002: 51: 18CST2007 FriNov3002: 51: 18CST2007 FriNov300
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 JAVA 时间 日期 最好 帖子