`
cakin24
  • 浏览: 1396316 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Calendar类的典型应用

    博客分类:
  • java
 
阅读更多

Calendar类的常见用法

1.代码示例

import java.util.*;
//静态导入只能在JDK 1.5的编译环境下运行
import static java.util.Calendar.*;

public class CalendarTest
{
	public static void main(String[] args)
	{
		Calendar c = Calendar.getInstance();
		// 取出年
		System.out.println(c.get(YEAR));
		// 取出月份
		System.out.println(c.get(MONTH));
		// 取出日
		System.out.println(c.get(DATE));
		// 分别设置年、月、日、小时、分钟、秒
		c.set(2016 , 10 , 23 , 12, 32, 23); //2016-11-23 12:32:23
		System.out.println(c.getTime());
		// 将Calendar的年前推1年
		c.add(YEAR , -1); //2016-11-23 12:32:23
		System.out.println(c.getTime());
		// 将Calendar的月前推8个月
		c.roll(MONTH , -8); //2016-03-23 12:32:23
		System.out.println(c.getTime());


		Calendar cal1 = Calendar.getInstance();
		cal1.set(2003, 7, 23, 0, 0 , 0); // 2003-8-23
		cal1.add(MONTH, 6); //2003-8-23 => 2004-2-23
		System.out.println(cal1.getTime());


		Calendar cal2 = Calendar.getInstance();
		cal2.set(2003, 7, 31, 0, 0 , 0); // 2003-8-31
		// 因为进位到后月份改为2月,2月没有31日,自动变成29日
		cal2.add(MONTH, 6); // 2003-8-31 => 2004-2-29
		System.out.println(cal2.getTime());


		Calendar cal3 = Calendar.getInstance();
		cal3.set(2003, 7, 23, 0, 0 , 0); //2003-8-23
		// MONTH字段“进位”,但YEAR字段并不增加
		cal3.roll(MONTH, 6); //2003-8-23 => 2003-2-23
		System.out.println(cal3.getTime());


		Calendar cal4 = Calendar.getInstance();
		cal4.set(2003, 7, 31, 0, 0 , 0); //2003-8-31
		// MONTH字段“进位”后变成2,2月没有31日,
		// YEAR字段不会改变,2003年2月只有28天
		cal4.roll(MONTH, 6); //2003-8-31 => 2003-2-28
		System.out.println(cal4.getTime());
	}
}


 

2.运行结果

2016
8
1
Wed Nov 23 12:32:23 CST 2016
Mon Nov 23 12:32:23 CST 2015
Mon Mar 23 12:32:23 CST 2015
Mon Feb 23 00:00:00 CST 2004
Sun Feb 29 00:00:00 CST 2004
Sun Feb 23 00:00:00 CST 2003
Fri Feb 28 00:00:00 CST 2003

 

3.代码说明

上面的代码示范了Calendar类的用法,Calendar可以很灵活地改变它对应的日期,该示例还演示了add方法和roll方法的区别:roll方法上一级字段不会进位,add方法上一级字段会进位。

 

Calendar类的容错性

1.代码示例

import java.util.*;
import static java.util.Calendar.*;


public class LenientTest
{
	public static void main(String[] args)
	{
		Calendar cal = Calendar.getInstance();
		// 结果是YEAR字段加1,MONTH字段为1(二月)
		cal.set(MONTH , 13);   //①
		System.out.println(cal.getTime());
		// 关闭容错性
		cal.setLenient(false);
		// 导致运行时异常
		cal.set(MONTH , 13);   //②
		System.out.println(cal.getTime());
	}
}

 

2.运行结果

Wed Feb 01 20:42:00 CST 2017
Exception in thread "main" java.lang.IllegalArgumentException: MONTH
 at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2316)
 at java.util.Calendar.updateTime(Calendar.java:2468)
 at java.util.Calendar.getTimeInMillis(Calendar.java:1087)
 at java.util.Calendar.getTime(Calendar.java:1060)
 at LenientTest.main(LenientTest.java:18)

 

3.代码说明

 Calendar有两种解释日历的模式:lenient模式和non-lenient模式。当Calendar处于lenient模式时,每个字段可接受超出它的范围;当Calendar处于non-lenient模式时,如果某个字段超出它的范围,程序将会抛出异常。

 

Calendar类的延迟修改

1.代码示例

import java.util.*;
import static java.util.Calendar.*;

public class LazyTest
{
	public static void main(String[] args)
	{
		Calendar cal = Calendar.getInstance();
		cal.set(2003 , 7 , 31);  //2003-8-31
		// 将月份设为9,但9月31日不存在。
		// 如果立即修改,系统将会把cal自动调整到10月1日。
		cal.set(MONTH , 8);
		// 下面代码输出10月1日
		//System.out.println(cal.getTime());    //①
		// 设置DATE字段为5
		cal.set(DATE , 5);    //②
		System.out.println(cal.getTime());    //③
	}
}

 

2.运行结果

Fri Sep 05 20:52:17 CST 2003

当放开①处代码,运行结果为下

Wed Oct 01 20:55:28 CST 2003
Sun Oct 05 20:55:28 CST 2003

 

3.代码说明

第③处的运行结果出现了不同的结果,很神奇。这是因为set()方法具有延迟修改的特性,即调用set()方法后Calendar实际并没有计算真实的日期,它只是使用内部成员变量记录MONTH字段被修改为8,接着程序设置DATA为5,程序内部再次记录DATE字段为5,就是9月5号。也就是说日期不会立即生效,直到下次调用get()、getTime()、getTimeInMillis()、add()、roll()才会重新计算时间。

 

分享到:
评论

相关推荐

    简易日历 Calendar Control 8.0

    总结,简易日历Calendar Control 8.0作为ActiveX技术的典型应用,为开发者提供了强大的日期选择工具。它以其易用性、可定制性和丰富的API,极大地提升了开发效率,广泛应用于各种类型的软件和Web应用中。对于那些...

    Calendar 组件

    在Java中,`java.util.Calendar`类就是一个典型的Calendar组件实例,而在iOS开发中,我们有`NSCalendar`类,这些都是应用程序处理日期和时间的基础。 在Android开发中,`android.widget.CalendarView`是一个用户...

    征服ASPNET2Ajax典型应用

    "征服ASPNET2Ajax典型应用"这个压缩包提供了一些示例,帮助初学者更好地理解和运用Ajax在ASP.NET 2.0中的应用。 首先,让我们了解一下Ajax的基本原理。Ajax允许在不重新加载整个网页的情况下,与服务器交换数据并...

    java作业,源代码报告,计算器,记事本

    提到的"计算器"和"记事本"项目,是典型的控制台应用程序,用于锻炼学生的逻辑思维和编程技巧。计算器可能要求实现基本的算术运算,如加、减、乘、除,甚至可能包含更复杂的运算,如开方或求幂。而记事本项目则可能...

    java-CalendarPad.rar_CalendarP_日历记事提醒_日历记事本_记事本提醒_记事本日历

    总的来说,Java的CalendarPad项目涵盖了日期时间处理、UI设计、数据模型构建、定时任务以及提醒服务等多个方面的知识点,是Java编程在实际应用中的典型示例。通过这个项目,开发者不仅可以提升Java编程技能,还能...

    Calendar 日历控件

    "Calendar 日历控件"是一个典型的例子,它通常通过AJAX(异步JavaScript和XML)技术实现,提供交互式的日期选择体验。AJAX允许网页在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,因此这种日历控件...

    calendarControl 日历控件

    "calendarControl"就是一个典型的日历控件,它为用户提供了一个直观、易用的方式来选择日期。在本篇文章中,我们将深入探讨日历控件的基本概念、其在不同平台上的实现方式,以及如何在实际项目中有效地使用和自定义...

    JAVA设计模式在JDK中的应用

    JDK中适配器模式的典型应用场景包括: - `java.util.Arrays#asList()`: 将数组转换为列表。 - `javax.swing.JTable(TableModel)`: 使用`TableModel`作为数据模型的适配器。 - `java.io.InputStreamReader...

    带源代码的ANDROID时钟应用程序.zip

    在Android平台上,开发一款时钟应用是一个典型的移动应用开发任务,涉及到的知识点广泛且深入。这个"带源代码的ANDROID时钟应用程序.zip"文件显然包含了完成这样一个项目的所有源代码,对于学习Android应用开发或者...

    IOS应用源码——时钟视图.zip

    在iOS开发中,创建一个时钟视图是一个典型的任务,涉及到UI设计、动画处理和时间显示等多个技术领域。本项目“IOS应用源码——时钟视图.zip”提供了一个实现此类功能的源代码示例,这对于我们理解iOS应用的开发流程...

    life-calendar:每周生活的在线日历

    示例数据可能用于展示应用的典型使用情况,而测试文件则用于确保代码的正确性和稳定性。 总的来说,"life-calendar"是一个创新的时间管理工具,结合了现代Web技术,如JavaScript、HTML5 Canvas和jspdf,提供了一个...

    Android应用源码之PWP简洁大日历.rar

    3. **日期处理**:Android系统提供了Calendar类用于日期操作,但在复杂的日历应用中,开发者通常会创建自己的Date或Event模型类来存储和处理日期信息。源码可能包含关于日期计算、时间跨度判断、节假日标记等功能的...

    Android应用源码之[安卓开源]PWP简洁大日历完整版.zip

    这涉及到Java的`java.util.Calendar`类或Android的`android.icu.util.Calendar`类的使用,以及日期格式化和解析。 3. **事件管理**:日历应用往往需要记录和显示用户的事件。这需要理解如何使用SQLite数据库存储...

    Java国际认证SCJP典型试题1000例(中文版).rar

    10. **Java标准库**:了解并掌握一些常用的Java API,如String类、Date类、Calendar类、Math类等,以及JDBC(Java Database Connectivity)用于数据库操作的基本概念和使用。 这个中文版的试题集将涵盖以上所有领域...

    Liberty Calendar-开源

    4. Web应用程序架构:Liberty Calendar遵循典型的三层架构模式,包括表示层(用于用户界面)、业务逻辑层(处理日历操作)和数据访问层(与数据库交互)。这种架构使得系统各部分职责明确,便于维护和扩展。 5. ...

    新版pep_五年级下册_unit3_my_school_calendar_b_let's_talk.ppt

    例如,Microsoft Outlook或Google Calendar等应用程序就是典型的日历管理软件,它们允许用户记录事件、设置提醒、安排会议并管理日常任务。这些系统通常支持输入各种类型的事件,如节日、纪念日、工作项目和私人活动...

    calendar-clock-system.rar_protel设计

    综上所述,这个项目涵盖了51单片机编程、C语言应用、电路设计、嵌入式系统开发等多个重要知识点,是学习电子设计和嵌入式系统开发的典型实例。通过分析和实践这样的项目,可以深入理解单片机的工作原理,掌握电路...

    Java国际认证(SCJP)典型试题1000例(中文高清影印版).zip

    10. **Java API**:熟悉Java标准库中的各种类和方法,如Math类、Date类、Calendar类等。 11. **JVM与编译过程**:简述Java虚拟机的工作原理,以及源代码到字节码的编译过程。 通过这1000道典型试题的练习,考生...

    JAVA国际认证(SCJP)典型试题1000例.rar

    熟悉Java标准库中的常用类和方法,如Math、Collections、Arrays、Date、Calendar等。 通过"JAVA国际认证(SCJP)典型试题1000例",考生可以系统地复习和练习这些知识点,提升自己的编程能力和应对考试的能力。每个...

Global site tag (gtag.js) - Google Analytics