zoukankan      html  css  js  c++  java
  • 引用 《转》Java中Date和Calendar类

    引用

    朝木 的 《转》Java中Date和Calendar类 

    有关如何使用Date和Calender类

    昨晚,有人问了一个问题,Date类和Calender有什么区别嘛?我看了一下java API还真说得不好理解。于是在网上也看了看,总总结出来,愿和大家一起学习,需要补充地方还望大家多提意见!

    我们将讨论下面的类:

    1、具体类(和抽象类相对)java.util.Date

    2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat

    3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar

    具体类可以被实例化, 但是抽象类(abstract)却不能. 你首先必须实现抽象类的一个具体子类.

    一.Date类的使用

    首先,看一个实例:

    import java.util.Date;

    public class Data{

    public static void main(String[] args) {

    Date date = new Date();//实例化一个date,获得系统日期

    System.out.println(date.getTime());//输出当到时间

    }

    }

    我们可以看到输出是一串数字,在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和分析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的相应方法已废弃。

    现在,开始改进:

    import java.text.SimpleDateFormat;

    import java.util.Date;

    public class Data {

    public static void main(String[] args) {

    SimpleDateFormat dateFormat =

    new SimpleDateFormat("yyyy-MM-dd E");//可以查API,根据自己的需要显示格式

    Date date = new Date();

    System.out.println("今天的日期是: "+dateFormat.format(date));

    }

    }

    二, Calender的使用

    我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类. 就如我们前面提到的那样, Calendar 类中的方法替代了Date 类中某些方法.

    假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号.

    import java.util.GregorianCalendar;

    import java.util.Date;

    import java.text.DateFormat;

    public class DateExample5 {

    public static void main(String[] args) {

    DateFormat dateFormat =DateFormat.getDateInstance(DateFormat.FULL);

    // Create our Gregorian Calendar.

    GregorianCalendar cal = new GregorianCalendar();

    // Set the date and time of our calendar

    // to the system's date and time

    cal.setTime(new Date());

    System.out.println("System Date: " + dateFormat.format(cal.getTime()));

    // Set the day of week to FRIDAY

    cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);

    System.out.println("After Setting Day of Week to Friday: " +dateFormat.format(cal.getTime()));

    int friday13Counter = 0;

    while (friday13Counter <= 10) {

    // Go to the next Friday by adding 7 days.

    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    // If the day of month is 13 we have

    // another Friday the 13th.

    if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) {

      friday13Counter++;

      System.out.println(dateFormat.format(cal.getTime()));

    }

    }

    }

    }

    在这个例子中我们作了有趣的函数调用:

    cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);

    和:

    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五. 注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. add 方法让我们能够在日期上加上数值. 润年的所有复杂的计算都由这个方法自动处理.

    我们这个例子的输出结果是:

    System Date: Saturday, September 29, 2001

    当我们将它设置成星期五以后就成了: Friday, September 28, 2001

    Friday, September 13, 2002

    Friday, December 13, 2002

    Friday, June 13, 2003

    Friday, February 13, 2004

    Friday, August 13, 2004

    Friday, May 13, 2005

    Friday, January 13, 2006

    Friday, October 13, 2006

    Friday, April 13, 2007

    Friday, July 13, 2007

    Friday, June 13, 2008

    七、时间掌握在你的手里

    有了这些Date 和Calendar 类的例子, 你应该能够使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 创建许多方法了.

  • 相关阅读:
    用最简单的例子理解装饰器模式(Decorator Pattern)
    用最简单的例子理解迭代器模式(Iterator Pattern)
    用最简单的例子理解观察者模式(Observer Pattern)
    用最简单的例子理解单例模式(Singleton Pattern)
    用最简单的例子理解对象为Null模式(Null Object Pattern)
    用最简单的例子理解策略模式(Strategy Pattern)
    使用Lazy<T>实现对客户订单的延迟加载
    C#关键字var是什么,在何种情况下使用
    C#中的IDisposable模式
    CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
  • 原文地址:https://www.cnblogs.com/yujy/p/3062378.html
Copyright © 2011-2022 走看看