JAVA面试题解惑系列(七)——日期和时间的处理
- 格式:doc
- 大小:144.00 KB
- 文档页数:19
Java中的日期和时间操作Java中提供了丰富的日期和时间操作的类和方法,方便我们对日期和时间进行处理和计算。
本文将介绍Java中常用的日期和时间操作。
一、日期和时间类在Java中,日期和时间相关的类主要包括以下几个:1. java.util.Date:表示日期和时间的类,常用的构造方法有无参构造方法、接收毫秒数的构造方法和接收年月日的构造方法。
2. java.util.Calendar:提供了对日期和时间进行操作的类,可以进行日期的加减、获取年月日等操作。
3. java.time.LocalDate:表示日期的类,提供了对年月日的操作和计算。
4. java.time.LocalTime:表示时间的类,提供了对时分秒的操作和计算。
5. java.time.LocalDateTime:表示日期和时间的类,提供了对日期时间的操作和计算。
6. java.time.format.DateTimeFormatter:用于日期和时间的格式化,可以将日期时间对象格式化为指定的字符串,或者将字符串解析为对应的日期时间对象。
二、日期和时间操作示例下面分别介绍一些常用的日期和时间操作示例。
1. 获取当前日期和时间:```javaimport java.time.LocalDateTime;public class DateTimeExample {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now(); System.out.println(now);}}```2. 格式化日期和时间:```javaimport java.time.LocalDateTime;import java.time.format.DateTimeFormatter; public class DateTimeExample {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDateTime = now.format(formatter);System.out.println(formattedDateTime);}}```3. 计算两个日期之间的差值:```javaimport java.time.LocalDate;import java.time.temporal.ChronoUnit;public class DateTimeExample {public static void main(String[] args) {LocalDate date1 = LocalDate.of(2022, 1, 1);LocalDate date2 = LocalDate.of(2022, 12, 31);long daysBetween = ChronoUnit.DAYS.between(date1, date2);System.out.println("Days between: " + daysBetween);}}```4. 日期的加减操作:```javaimport java.time.LocalDate;import java.time.temporal.ChronoUnit;public class DateTimeExample {public static void main(String[] args) {LocalDate now = LocalDate.now();LocalDate oneWeekLater = now.plus(1, ChronoUnit.WEEKS);LocalDate oneMonthEarlier = now.minus(1,ChronoUnit.MONTHS);System.out.println("One week later: " + oneWeekLater);System.out.println("One month earlier: " + oneMonthEarlier);}}```5. 判断某个日期是否在另一个日期之前或之后:```javaimport java.time.LocalDate;public class DateTimeExample {public static void main(String[] args) {LocalDate date1 = LocalDate.of(2022, 1, 1);LocalDate date2 = LocalDate.of(2022, 12, 31);boolean isBefore = date1.isBefore(date2);boolean isAfter = date1.isAfter(date2);System.out.println("Is date1 before date2? " + isBefore); System.out.println("Is date1 after date2? " + isAfter);}}```6. 获取特定日期的年、月、日信息:```javaimport java.time.LocalDate;public class DateTimeExample {public static void main(String[] args) {LocalDate now = LocalDate.now();int year = now.getYear();int month = now.getMonthValue();int day = now.getDayOfMonth();System.out.println("Year: " + year);System.out.println("Month: " + month);System.out.println("Day: " + day);}}```三、总结本文介绍了Java中常用的日期和时间操作,包括日期和时间的类、日期和时间的格式化、日期和时间的计算等内容。
Java时间日期处理技巧:日期格式化和时区设置在Java编程中,日期和时间处理是非常常见的任务。
无论是在开发Web应用程序、处理数据还是进行系统日志记录,都需要对日期和时间进行操作。
本文将介绍一些Java中常用的日期格式化和时区设置的技巧,帮助开发者更好地处理日期和时间。
1. 日期格式化日期格式化是将日期对象转换为特定格式的字符串表示。
Java提供了SimpleDateFormat类来实现日期格式化。
以下是一个简单的例子:```javaimport java.text.SimpleDateFormat;import java.util.Date;public class DateFormatExample {public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);System.out.println("Formatted Date: " + formattedDate);}}```在上面的例子中,我们使用了"yyyy-MM-dd HH:mm:ss"作为日期格式化的模式,它将日期格式化为"年-月-日时:分:秒"的形式。
Java的日期格式化模式有很多选项,可以根据需求进行调整。
例如,"yyyy-MM-dd"表示"年-月-日","HH:mm:ss"表示"时:分:秒","EEE"表示星期几等等。
更多的格式化选项可以参考Java官方文档。
2. 时区设置时区是指地球上划分的不同区域,每个时区都有自己的标准时间。
第1篇一、基础知识1. Java简介题目:请简述Java的基本特点。
答案:- 简单易学:Java设计之初就考虑了易学性,使用面向对象编程。
- 原生跨平台:Java通过JVM(Java虚拟机)实现跨平台运行。
- 安全性:Java提供了强大的安全机制,如沙箱安全模型。
- 体系结构中立:Java不依赖于特定的硬件或操作系统。
- 高效:Java的运行速度接近C/C++。
- 多线程:Java内置多线程支持,便于实现并发处理。
- 动态性:Java在运行时可以进行扩展和修改。
2. Java虚拟机题目:请解释Java虚拟机(JVM)的作用。
答案:JVM是Java程序的运行环境,其主要作用包括:- 将Java字节码转换为本地机器码。
- 管理内存,包括堆、栈、方法区等。
- 提供垃圾回收机制。
- 管理线程和同步。
3. Java内存模型题目:请简述Java内存模型的组成。
答案:Java内存模型主要由以下部分组成:- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储局部变量和方法调用。
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 本地方法栈(Native Method Stack):存储本地方法调用的相关数据。
- 程序计数器(Program Counter Register):存储线程的当前指令地址。
4. Java关键字题目:请列举并解释Java中的几个关键字。
答案:- `public`:表示访问权限为公开。
- `private`:表示访问权限为私有。
- `protected`:表示访问权限为受保护。
- `static`:表示属于类本身,而非对象实例。
- `final`:表示常量或方法不能被修改。
- `synchronized`:表示线程同步。
- `transient`:表示数据在序列化时不会被持久化。
二、面向对象编程5. 类和对象题目:请解释类和对象之间的关系。
答案:类是对象的模板,对象是类的实例。
JAVA面试题解惑系列– 日期和时间的处理问题:JAVA面试题解惑系列日期和时间的处理回答:日期和时间的处理不仅在面试题中会考到,在实际项目开发中也是我们经常需要处理的问题,似乎没有哪个项目可以避开它们,我们常常在处理用户的出生年月日、注册日期,订单的创建时间等属性时用到,由此可见其重要性。
java.util.Date类提到日期和时间,我想大家最先想到应该是java.util.Date类吧。
Date类可以精确到毫秒数,这个毫秒数是相对于格林威治标准时间“1970-01-01 00:00:00.000 GMT”的差值。
那么,什么是格林威治标准时间呢要回答这个问题,我们需要先来了解一下世界时间标准方面的知识。
世界时间标准主要有UTC,即Coordinated Universal Time(中文名译作世界协调时间、世界统一时间或世界标准时间),以及GMT,即Greenwich Mean Time(中文名译作格林威治标准时间或格林威治平均时间)两种。
严格来讲,UTC比GMT更加精确一些,不过它们的差值不会超过0.9秒,如果超过了,将会为UTC增加闰秒以与GMT,也就是地球自转周期保持一致。
所以在日常使用中,我们可以把UTC和GMT一样看待。
日期和时间的表示是与我们所处的时区相关联的,如果我们不指定时区,那么它们将以系统默认的时区来显示。
我们先来看看如何创建日期对象。
Date类有很多个构造器方法,大部分已经不被赞成使用了(Deprecated),不过还剩下两个可以使用的:Java代码public Date()this(System.currentTimeMillis());public Date(long date)//other code第一个是无参构造器,使用系统当前时间的毫秒数来创建Date 对象,它调用了ng.System类的currentTimeMillis()来取得系统的当前时间的毫秒值。
java 时间格式写法在Java中,我们可以使用java.time包中的类来处理日期和时间。
以下是一些常见的日期和时间格式写法:1.获取当前日期和时间:javaimport java.time.LocalDateTime;LocalDateTime now = LocalDateTime.now();System.out.println(now); // 输出当前日期和时间2.格式化日期和时间:javaimport java.time.LocalDateTime;import java.time.format.DateTimeFormatter;LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDateTime = now.format(formatter);System.out.println(formattedDateTime); // 输出格式化后的日期和时间3.解析日期和时间:javaimport java.time.LocalDateTime;import java.time.format.DateTimeFormatter;String dateTimeStr = "2023-03-15 12:34:56";DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime dateTime =LocalDateTime.parse(dateTimeStr, formatter);System.out.println(dateTime); // 输出解析后的日期和时间4.处理时区:javaimport java.time.ZonedDateTime;import java.time.ZoneId;ZonedDateTime dateTime =ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));System.out.println(dateTime); // 输出当前亚洲/上海时区的日期和时间以上是一些常见的Java日期和时间格式写法,你可以根据具体需求进行调整和扩展。
第 6 章时间、日期和数字6.1 Date 类Date a=new Date();(1)Date 类在 java.util 包中。
使用 Date 类的无参数构造方法创立的对象可以获得当地当前时间。
Date 对象表示时间的默认序次是星期、月、日、小时、分、秒、年。
比方: Sat Apr 28 21:59:38 CST 2001(2)我们可能希望按着某种习惯来输出时间,比方时间的序次:年月礼拜日或年代礼拜日小时分秒。
这时可以使用 DataFormat 的子类 SimpleDateFormat来实现期间的格式化。
SimpleDateFormat有一个常用构造方法:public SimpleDateFormat(String pattern)。
该构造方法可以用参数pattern 指定的格式创立一个对象,该对象调用format(Date date)方法格式化时间对象date。
需要注意的是, pattern 中应该含有一些有效的字符序列。
比方:● y 或 yy 表示用两位数字输出年份 yyyy 表示用 4 位数字输出年份。
●M 或 MM 表示用两位数字或文本输出月份,假如想用汉字输出月份, pattern 中应连续包含最少 3 个 M ,如 MMM 。
● d 或 dd表示用两位数字输出日。
●H 或 HH表示用两位数字输出小时。
●m 或 mm表示用两位数字输出分。
●s 或 ss表示用两位数字输出秒。
●E表示用字符串输出礼拜。
在下边的例子中,我们用 3 种格式输出时间。
(3)Java日期时间及其格式化可以用System类的静态方法public static long currentTimeMillis() 获得系统当前时间,这个时间是从1970 年 1 月 1 日 0 点到当前时辰所走过的毫秒数 (这是一个不小的数 )。
别的,也可以依据 currentTimeMillis() 方法获得的数字,用 Date 的构造方法 Date(long time)来创立一个 Date 对象。
Java进⾏时间处理Java 进⾏时间处理⼀、Calendar(1)、Calender介绍Calendar的中⽂翻译是⽇历,实际上,在历史上有着许多种计时的⽅法。
所以为了计时的统⼀,必需指定⼀个⽇历的选择。
那现在最为普及和通⽤的⽇历就是"Gregorian Calendar"。
也就是我们在讲述年份时常⽤"公元**年"。
Calendar 在 Java 中是⼀个抽象类(Abstract Class),GregorianCalendar 是它的⼀个具体实现。
Calendar.getInstance()中所获得的实例就是⼀个"GreogrianCalendar"对象。
(2)、简单的⽇期使⽤Calendar cal = Calendar.getInstance();System.out.println(cal.get(Calendar.DATE));//-----------------------今天是⼏号System.out.println(cal.get(Calendar.DAY_OF_MONTH));//---------------今天是⼀⽉的第⼏天System.out.println(cal.get(Calendar.DAY_OF_WEEK));//----------------从星期天开始计算,如果今天星期⼆,那么返回3System.out.println( cal.get(Calendar.DAY_OF_YEAR));//----------------今天是⼀年的第⼏天System.out.println( cal.get(Calendar.HOUR));//-----------------------现在是⼏点 12⼩时制System.out.println( cal.get(Calendar.HOUR_OF_DAY));//----------------现在是⼏点 24⼩时制,⼀般使⽤这个属性赋值System.out.println(cal.get(LISECOND));//----------------现在的毫秒System.out.println( cal.get(Calendar.MINUTE));//---------------------现在是⼏分System.out.println( cal.get(Calendar.SECOND));//---------------------现在是⼏秒System.out.println(cal.get(Calendar.WEEK_OF_MONTH));//--------------现在是⼀个⽉中的第⼏周System.out.println(cal.get(Calendar.WEEK_OF_YEAR));//----------------现在是⼀个年中的第⼏周System.out.println(cal.get(Calendar.MONTH));//-----------------------⽉份获取需要 +1,那么,赋值时需要 -1System.out.println(cal.get(Calendar.MONTH)-1); //即可获得上个⽉的⽉份(3)、与Date之间的转换Calendar calendar = Calendar.getInstance();// 从⼀个Calendar 对象中获取 Date 对象Date date = calendar.getTime();// 将 Date 对象反应到⼀个 Calendar 对象中,// 先获得⼀个实例,然后设置 Date 对象calendar.setTime(date);⽉份的起始值为0⽽不是1,所以要设置⼋⽉时,我们⽤7⽽不是8。
JAVA处理日期时间常用方法:java .util .Calendar Cale ndar类是一个抽象类,它为特定瞬间与一组诸如YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970 年1 月1 日的00:00:00.000,格里高利历)的偏移量。
例:Calendar cal =Calendar.getInstance(。
) //使用默认时区和语言环境获得一个日历。
cal.add(Calendar.DAY_OF_MONTH, -1)。
//取当前日期的前一天.cal.add(Calendar.DAY_OF_MONTH, +1)。
//取当前日期的后一天.//通过格式化输出日期java.text.SimpleDateFormat format = 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日期: Calendar calendar = new GregorianCalendar(2007, 11, 25,0,0,0)。
Date date = calendar.getTime(。
) System.out.println("2007 Christmas is:"+format.format(date))。
//java月份是从0-11,月份设置时要减1.//Gregoria nCale nda构造方法参数依次为:年,月-1 ,日,时,分,秒.取日期的部分: int year =calendar.get(Calendar.YEAR)。
Java的时间处理(续<计算Java时间>学习在java中计算基本的时间段概述如果你知道怎样在java中使用日期,那么使用时间和它才不多一样简单。
这篇文章告诉你怎样把他们的差别联系起来。
Robert Nielsen还告诉你怎样使用java来计算抵达航班和制造过程的时间。
作者:Robert Nielsen翻译:Cocia Lin这篇文章是在我发表过的<计算Java时间>(译者:已经翻译完成的基础上的。
在这里,我列出那篇文章几个你应该熟悉得关键点。
如果这几点你不太清楚,我建议你读一下<计算Java 时间>,了解一下。
1. Java计算时间依靠1970年1月1日开始的毫秒数.2. Date类的构造函数Date(返回代表当前创建的时刻的对象。
Date的方法getTime(返回一个long值在数值上等于1970年1月1日之前或之后的时刻。
3. DateFormat类用来转换Date到String,反之亦然。
静态方法getDateInstance(返回DateFormat 的缺省格式;getDateInstance(DateFormat.FIELD返回指定的DateFormat对象格式。
Format(Date d方法返回String表示日期,例如"January 1,2002."反过来,parse(String s方法返回以参数字符串表示的Date对象。
4. format(方法返回的字符串格式根据不同地区的时间设置而有所不同。
5. GregorianCalendear类有两个重要的构造函数:GregorianCalerdar(,返回代表当前创建时间的对象;GregorianCalendar(int year,int month,int date返回代表任意日期的对象。
GregorianCalendar类的getTime(方法返回日期对象。
Add(int field,int amount 方法通过加或减时间单位,象天数,月数或年数来计算日期。
第九讲常用类二、日期及日期格式化在java语言中,有Date(日期)、DateFormat(格式化日期)、Calendar(日历)这三个类组成一个标准且基本的,对日期处理的非常重要的一部分。
日期是商业逻辑计算中关键的一个部分。
作为开发者,针对日期类型都可能会产生一些需求,比如获得当前日期时间,获得未来的日期时间,不同地区的用户还需要有针对性的对日期时间进行相应的格式化(日期国际化),把文本(字符串)的日期转换成日期对象等等。
在jdk1.1之前,只有Date类来处理日期时间数据,它允许把日期时间解释为年月日时分秒,它也具有对日期进行格式化和解析日期字符串的功能。
但在日期国际化方面不方便。
因此从jdk1.1开始,引用了Calendar类,主要用来对日期类型进行转换,使用DateFormat 来格式化日期,Date类中相应方法即被废弃。
1、Date类(产生当前日期时间)实际上是一个包装类,它包含一个长整形的数据,表示的是从GMT(格林威治标准时间)1900年1月1日00:00:00 这一刻之前或之后经历的毫秒数。
2、日期格式化我们是通过SimpleDateFormat类的构造方法传递格式化的字符串(“yyyy-MM-dd”),来指明我们自己想要的日期时间格式,此种格式告诉我们要格式化日期时间的哪些部分。
3、将文本数据解析成日期对象如果我们有一个字符串类型的对象,它描述的就是一个格式化的日期时间,而且希望把它解析(转换)成一个日期对象,我们可以调用SimpleDateFormat来转换完成。
4、Calendar类此类是一个抽象基类,主要完成日期字段之间的互相操作的功能。
如设置和获取日期数据的特定部分,在日期的某些部分加上或减去值等等。
三、数字格式化类NumberFormat类也是一个抽象类,提供了格式化和分析数字的接口。
四、Math类Math类定义了多个static方法,提供常用的数学运算功能。
1、截断操作ceil floor round2、取最大最小值及绝对值max min abs3、三角函数sin cos tan atan4、对数log exp5、其他sqrt pow random6、常量PI E五、Random类该类生成伪随机数,可产生各种基本数据类型的随机数。
JAVA面试题解惑系列(七)——日期和时间的处理日期和时间的处理不仅在面试题中会考到,在实际项目开发中也是我们经常需要处理的问题,似乎没有哪个项目可以避开它们,我们常常在处理用户的出生年月日、注册日期,订单的创建时间等属性时用到,由此可见其重要性。
java.util.Date类提到日期和时间,我想大家最先想到应该是java.util.Date类吧。
Date类可以精确到毫秒数,这个毫秒数是相对于格林威治标准时间“1970-01-0100:00:00.000 GMT”的差值。
那么,什么是格林威治标准时间呢?要回答这个问题,我们需要先来了解一下世界时间标准方面的知识。
世界时间标准主要有UTC,即Coordinated Universal Time(中文名译作世界协调时间、世界统一时间或世界标准时间),以及GMT,即Greenwich Mean Time (中文名译作格林威治标准时间或格林威治平均时间)两种。
严格来讲,UTC比GMT更加精确一些,不过它们的差值不会超过0.9秒,如果超过了,将会为UTC 增加闰秒以与GMT,也就是地球自转周期保持一致。
所以在日常使用中,我们可以把UTC和GMT一样看待。
日期和时间的表示是与我们所处的时区相关联的,如果我们不指定时区,那么它们将以系统默认的时区来显示。
我们先来看看如何创建日期对象。
Date类有很多个构造器方法,大部分已经不被赞成使用了(Deprecated),不过还剩下两个可以使用的:Java代码1.public Date() {2.this(System.currentTimeMillis());3.}4.5.public Date(long date) {6.//other code7.}第一个是无参构造器,使用系统当前时间的毫秒数来创建Date对象,它调用了ng.System类的currentTimeMillis()来取得系统的当前时间的毫秒值。
这是个本地方法,它的定义如下:Java代码1.public static native long currentTimeMillis();第二个构造器是根据给定的毫秒数来创建一个与之对应的Date对象,这个毫秒数决定了被创建对象的年、月、日、时、分、秒属性的值。
我们来看看日期和时间在默认时区下的显示效果:Java代码1.import java.util.Date;2.3.public class DateTest {4.public static void main(String[] args) {5.Date d = new Date();6.// 在默认时区下输出日期和时间值7.System.out.println(d);8.}9.}运行结果:Tue Jul 22 10:44:47 CST 2008大家应该注意到了年份前的“CST”标识,它是China Standard Time的缩写,指的是中国标准时间,也就是我们常说的北京时间。
它与UTC的时差是UTC+8:00,就是说北京时间比世界标准时间早8个小时,如果世界标准时间是早上1点,北京时间就是早上9点。
一般情况下我们不需要关心时区问题。
在创建完Date对象之后,我们可以通过调用getTime()方法来获得该对象的毫秒数值,调用setTime(long time)方法来设置它的毫秒数值,从而影响年、月、日、时、分、秒这些属性。
这两个方法的定义如下:Java代码1.public long getTime() {2.//other code3.}4.5.public void setTime(long time) {6.//other code7.}既然Date对象可以表示盛相对于“1970-01-01 00:00:00.000 GMT”的毫秒数,我们自然可以通过这个值来比较两个日期的大小了,不过对于日期来讲,前后的说法应该更为恰当。
而Date类已经为我们提供了这样的方法:Java代码1.public boolean before(Date when) {2.//other code3.}4.5.public boolean after(Date when) {6.//other code7.}8.9.public int compareTo(Date anotherDate) {10. //other code11.}before()是判断当前日期是否在参数日期之前,即当前日期毫秒数小于参数日期毫秒数;after()是判断当前日期是否在参数日期之后,即当前日期毫秒数大于参数日期毫秒数。
而compareTo()是将当前日期与参数日期比较后,返回一个int 型值,它的返回值有三种可能:-1、0和1。
如果返回-1则表示当前日期在参数日期之前;如果返回0则表示两个日期是同一时刻;返回1则表示当前日期在参数日期之后。
虽然我们可以用compareTo()方法来比较两个Date对象,但是它的设计实际是另有用途的,我们在后面的章节将会讲到。
下面我们就用一个示例来检验一下以上方法的用法:Java代码1.import java.util.Date;2.3.public class DateTest {4.public static void main(String[] args) {5.// 2008-08-08 20:00:00对应的毫秒数6.long t2008 = 00L;7.// 1900-01-01 20:00:00对应的毫秒数8.long t1900 = -00L;9.10. // 指定毫秒数创建Date对象11. Date d2008 = new Date(t2008);12. // 使用系统默认时间创建Date对象13. Date d1900 = new Date();14. // 通过设置毫秒数改变日期和时间15. d1900.setTime(t1900);16.17. System.out.println("调用方法:d1900.before(d2008)");18. System.out19. .print("比较结果:\"1900-01-01 20:00:00\"在\"2008-08-08 20:00:00\"");20. // 使用before()方法比较21. if (d1900.before(d2008)) {22. System.out.println("之前");23. } else {24. System.out.println("之后");25. }26.27. System.out.println();28.29. System.out.println("调用方法:d2008.after(d1900)");30. System.out31. .print("比较结果:\"2008-08-08 20:00:00\"在\"1900-01-01 20:00:00\"");32. // 使用after()方法比较33. if (d2008.after(d1900)) {34. System.out.println("之后");35. } else {36. System.out.println("之前");37. }38.39. System.out.println();40.41. System.out.println("调用方法:pareTo(d2008)");42. System.out43. .print("比较结果:\"1900-01-01 20:00:00\"在\"2008-08-08 20:00:00\"");44. // 使用compareTo()方法比较45. int i = pareTo(d2008);46. if (i == -1) {47. System.out.println("之前");48. } else if (i == 1) {49. System.out.println("之后");50. } else if (i == 0) {51. System.out.println("是同一时刻");52. }53. }54.}运行结果:1.调用方法:d1900.before(d2008)2.比较结果:"1900-01-01 20:00:00"在"2008-08-08 20:00:00"之前3.4.调用方法:d2008.after(d1900)5.比较结果:"2008-08-08 20:00:00"在"1900-01-01 20:00:00"之后6.7.调用方法:pareTo(d2008)8.比较结果:"1900-01-01 20:00:00"在"2008-08-08 20:00:00"之前那么如果我们想直接获取或者改变年、月、日、时、分、秒等等这些属性的值时怎么办呢?Date类当然有完成这些操作的方法,不过遗憾的是它们也都已经不被赞成使用了。
我们必须换一个能够提供这些操作的类,这个类就是java.util.Calendar。
公历历法java.util.GregorianCalendarCalendar是一个抽象类,我们无法直接实例化它,它有一个具体子类实体类java.util.GregorianCalendar,这个类实现的就是我们日常所用的公历历法,或者叫做阳历。
我们可以直接使用new命令创建它的实例,或者使用Calendar 类的这个方法来获得它实例:Java代码1.public static Calendar getInstance(){2.//other code3.}采用上面这个方法时,我们创建的Calendar对象的日期和时间值是对象被创建时系统日期和时间值。
当使用new命令时,我们有两种选择,一种是使用系统当前的日期和时间值初始化GregorianCalendar对象;另一种是通过给定年、月、日、时、分、秒等属性值来对其进行初始化。
请看下面的例子:Java代码1.import java.text.DateFormat;2.import java.text.SimpleDateFormat;3.import java.util.Calendar;4.import java.util.GregorianCalendar;5.6.public class DateTest {7./**8.* 以一种较为友好的方式格式化日期时间值9.*10. * @param c11. * 日期时间对象12. * @return 格式化后的日期时间字符串13. */14. public static String toFriendlyString(Calendar c){15. if (c != null) {16. DateFormat df = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");17. return df.format(c.getTime());18. }19. return null;20. }21.22. public static void main(String[] args) {23. Calendar c1 = Calendar.getInstance();24. System.out.println("创建方式:Calendar.getInstance()");25. System.out.println("日期时间:" + DateTest.toFriendlyString(c1));26. System.out.println();27.28. Calendar c2 = new GregorianCalendar();29. System.out.println("创建方式:new GregorianCalendar()");30. System.out.println("日期时间:" + DateTest.toFriendlyString(c2));31. System.out.println();32.33. // 参数含义依次为:年、月、日34. Calendar c3 = new GregorianCalendar(2008,8, 8);35. System.out.println("创建方式:new GregorianCalendar(2008, 8, 8)");36. System.out.println("日期时间:" + DateTest.toFriendlyString(c3));37. System.out.println();38.39. // 参数含义依次为:年、月、日、时、分40. Calendar c4 = new GregorianCalendar(2008,8, 8, 6, 10);41. System.out.println("创建方式:new GregorianCalendar(2008, 8, 8, 6, 10)");42. System.out.println("日期时间:" + DateTest.toFriendlyString(c4));43. System.out.println();44.45. // 参数含义依次为:年、月、日、时、分、秒46. Calendar c5 = new GregorianCalendar(2008,8, 8, 18, 10, 5);47. System.out.println("创建方式:new GregorianCalendar(2008, 8, 8, 18, 10, 5)");48. System.out.println("日期时间:" + DateTest.toFriendlyString(c5));49. }50.}运行结果如下:1.创建方式:Calendar.getInstance()2.日期时间:2008年07月22日 11:54:483.4.创建方式:new GregorianCalendar()5.日期时间:2008年07月22日 11:54:486.7.创建方式:new GregorianCalendar(2008, 8,8.日期时间:2008年09月08日 00:00:009.10.创建方式:new GregorianCalendar(2008, 8, 8, 6, 10)11.日期时间:2008年09月08日 06:10:0012.13.创建方式:new GregorianCalendar(2008, 8, 8, 18, 10, 5)14.日期时间:2008年09月08日 18:10:05为了便于阅读,我们增加一个toFriendlyString(Calendar c)方法,它将日期时间值格式化为一种更加友好易懂的形式,我们将在接下来的内容中讲解它的实现原理。