首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 新手入门 >> 基础入门 >> 正文

JAVA Calendar方法详解

    4. add() 与 roll() 的区别

    add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。

    add() 有两条规则:

    当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:
    Calendar cal1 = Calendar.getInstance();
    cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
    cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1,对吗?
    System.out.println(cal1.getTime()); //结果是 2000-9-30

    另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。

    以上面的例子,9-31 就会变成 9-30,因为变化最小。

    Roll() 的规则只有一条:
    当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。如:

    Calendar cal1 = Calendar.getInstance();
    cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日
    cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二
    cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日
    cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日
    WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。

    Date类介绍

    Data和Calendar类:
    一、创建一个日期对象r

    让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简
    单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.
    import java.util.Date;

    public class DateExample1 {
    public static void main(String[] args) {
    // Get the system date/time
    Date date = new Date();

    System.out.println(date.getTime());
    }
    }

    在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上
    显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造


    函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部
    使用了System.currentTimeMillis() 方法来从系统获取日期.如果用

    System.out.println(new Date());

    则输出形式为:Tue Nov 08 14:28:07 CST 2005

    那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如
    何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.
    SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.

    二、日期数据的定制格式

    假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展
    示了如何完成这个工作:

    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample2 {

    public static void main(String[] args) {

    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat(\"EEEE-MMMM-dd-yyyy\");

    Date date = new Date();

    System.out.println(bartDateFormat.format(date));
    }
    }

    只要通过向SimpleDateFormat 的构造函数传递格式字符串\"EEE-MMMM-dd-yyyy\",
    我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符
    告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日[Page]
    , yyyy是年. 字符的个数决定了日期是如何格式化的.传递\"EE-MM-dd-yy\"会显示
    Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.

    三、将文本数据解析成日期对象r

    假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个
    字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串
    \"MM-dd-yyyy\" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不
    是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串
    \"9-29-2001\"并创建一个值为001736000000 的日期对象.

    例子程序:

    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample3 {

    public static void main(String[] args) {
    // Create a date formatter that can parse dates of
    // the form MM-dd-yyyy.
    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat(\"MM-dd-yyyy\");

    // Create a string containing a text date to be parsed.
    String dateStringToParse = \"9-29-2001\";

    try {
    // Parse the text version of the date.
    // We have to perform the parse method in a
    // try-catch construct in case dateStringToParse
    // does not contain a date in the format we are expecting.
    Date date = bartDateFormat.parse(dateStringToParse);

    // Now send the parsed date as a long value
    // to the system output.
    System.out.println(date.getTime());
    }
    catch (Exception ex) {
    System.out.println(ex.getMessage());
    }
    }
    }

上一页  [1] [2] [3] [4] 下一页

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航