JAVA日期处理类总结:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat类

转载 2013年12月05日 12:30:22

1、         Date类(该类现在很少用了)

l         Date类对象的创建:

 

n         创建一个当前时间

//默认是创建一个代表系统当前日期的Date对象

  Date d = new Date();

n         创建一个我们指定的时间的Date对象:

下面是使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。

//创建一个代表2009年6月12号的Date对象

Date d1 = new Date(2009-1900, 6-1, 12); (注意参数的设置啊!)

l         正确获得一个date对象所包含的信息

如:

    Date d2 =  new Date(2009-1900, 6-1, 12);

        //获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)

        int year = d2.getYear() + 1900;

        //获得月份  (注意月份要加1,这样才是日期对象d2所代表的月份)

        int month = d2.getMonth() + 1;

        //获得日期

        int date = d2.getDate();

        //获得小时

        int hour = d2.getHours();

        //获得分钟

        int minute = d2.getMinutes();

        //获得秒

        int second = d2.getSeconds();

        //获得星期 (注意:0代表星期日、1代表星期12代表星期2,其他的一次类推了)

        int day = d2.getDay();

运行结果:

年份:2009

月份:6

日期:12

小时:0  //不设置默认是0

分钟:0  //不设置默认是0

秒:0    //不设置默认是0

星期:5  //09-6-12今天就是星期5,又是一个星期天哦

 

 

2、         Calendar

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些

 

l         Calendar类对象的创建

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象。由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

 

n         创建一个代表系统当前日期的Calendar对象

Calendar c = Calendar.getInstance();//默认是当前日期

n         创建一个指定日期的Calendar对象

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

//创建一个代表2009年6月12日的Calendar对象

Calendar c1 = Calendar.getInstance();

c1.set(2009, 6 - 1, 12);

 

l         Calendar类对象字段类型

 

Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

Calendar.YEAR——年份

Calendar.MONTH——月份

Calendar.DATE——日期

Calendar.DAY_OF_MONTH——日期,和上面的字段意义完全相同

Calendar.HOUR——12小时制的小时

Calendar.HOUR_OF_DAY——24小时制的小时

Calendar.MINUTE——分钟

Calendar.SECOND——秒

Calendar.DAY_OF_WEEK——星期几

 

 

l         Calendar类对象信息的设置与获得

n         Calendar类对象信息的设置

u       Set设置

如:Calendar c1 = Calendar.getInstance();

调用:public final void set(int year,int month,int date)

c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

利用字段类型设置

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

调用:public void set(int field,int value)

//把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算

c1.set(Calendar.DATE,10);

//把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算

c1.set(Calendar.YEAR,2008);

         其他字段属性set的意义以此类推

u       Add设置

Calendar c1 = Calendar.getInstance();

//把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算

c1.add(Calendar.DATE, 10);

//把c1对象的日期加上10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算

c1.add(Calendar.DATE, -10);

其他字段属性的add的意义以此类推

n         Calendar类对象信息的获得

Calendar c1 = Calendar.getInstance();

// 获得年份

int year = c1.get(Calendar.YEAR);

// 获得月份

int month = c1.get(Calendar.MONTH) + 1;

// 获得日期

int date = c1.get(Calendar.DATE);

// 获得小时

int hour = c1.get(Calendar.HOUR_OF_DAY);

// 获得分钟

int minute = c1.get(Calendar.MINUTE);

// 获得秒

int second = c1.get(Calendar.SECOND);

// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期13代表星期二,以此类推)

int day = c1.get(Calendar.DAY_OF_WEEK);

 

 

3、         GregorianCalendar

GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

GregorianCalendar类对象的创建

GregorianCalendar有自己的构造方法,而其父类Calendar没有公开的构造方法哦。

GregorianCalendar() 
          在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth) 
          在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 
          为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) 
          为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

创建一个代表当前日期的GregorianCalendar对象

GregorianCalendar gc = new GregorianCalendar();

//创建一个代表2009年6月12日的GregorianCalendar对象(注意参数设置哦,与其父类是一样的哦,月份要减去1)

GregorianCalendar gc = new GregorianCalendar(2009,6-1,12);

字段属性什么的都是随其父Calendar了,呵

另外:GregorianCalendar有下面一个方法:

isLeapYear(int year) 
          确定给定的年份是否为闰年

4、         DateFormat

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。

5、         SimpleDateFormat

public class SimpleDateFormat extends DateFormat

SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。

所以本类可以实现:String 到 Date   Date到String的互转,如下:

 

SimpleDateFormat对象最常用的就是一下两招了:

//注意构造函数中是SimpleDateFormat类解析日期的模式,大小写代表的意义完全不一样哦

       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

           //日期到字符串的转换

           String today = df.format(new Date());

           //字符串到日期的转换

           Date date = df.parse("2009-06-12 02:06:37");

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

   

6、         日期类对象之间的互转

l         Date类对象与long型时间的互转

//Date类的对象转换为long型时间

Date d= new Date();

//使用对象的getTime()方法完成

long dLong = d.getTime();

 

//long型时间转换为Date类的对象

long time = 1290876532190L;

//使用Date的构造方法完成

Date d2 = new Date(time);

l         Calendar对象和long型时间之间的互转

// Calendar对象转换为相对时间

Calendar c = Calendar.getInstance();

long t1 = c.getTimeInMillis();

 

// 将相对时间转换为Calendar对象

Calendar c1 = Calendar.getInstance();

long t = 1252785271098L;

c1.setTimeInMillis(t1);

l         Calendar对象和Date对象之间的互转

// Calendar对象转换为相对时间

Calendar c = Calendar.getInstance();

Date d = c.getTime();

 

// 将相对时间转换为Calendar对象

Calendar c1 = Calendar.getInstance();

Date d1 = new Date();

//通过setTime()方法后,日历c1所表示的日期就d1的日期

c1.setTime(d1);

 

7、         Ok,利用以上各个类的功能,我们可以很简单的实现一些时间计算的功能哦,呵呵,下面看几个方法:

l         判断是否是闰年

    /**

     * 给定一个年份判断该年份是否为闰年 create date:2009-6-10 author:Administrator

     *

     * @param year

     * @return

     */

    public static boolean isLeapYear(int year) {

       GregorianCalendar calendar = new GregorianCalendar();

       return calendar.isLeapYear(year);

    }

 

l         获取当前日期的字符串表示形式

    /**

     * 利用SimpleDateFormat获取当前日期的字符串表示形式 格式:2009-55-05

     *

     * create date:2009-6-5 author:Administrator

     *

     * @return

     */

    public static String getCurrentDate() {

       // 注意 SimpleDateFormat("yyyy-MM-dd")的参数间隔符号可以随意设置的,如:

       // yyyyMMdd 返回格式:20090609

       // yyyy-MM-dd 返回格式: 2009-06-09

       // SimpleDateFormat dateFormat = new SimpleDateFormat(

       // "yyyy-MM-dd HH:mm:ss");

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

       return dateFormat.format(System.currentTimeMillis());

 

    }

 

l         给出任意一个年月日得到该天是星期几

    /**

     * 给出任意一个年月日得到该天是星期几 create date:2009-6-10 author:Administrator

     *

     * @param date

     *            参数格式 2009-6-10

     *   返回值:0 代表星期日,1代表星期12代表星期2,以此类推

     */

   

    public static int getWeek(String date) {

 

       // 注意参数的大小写格式

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

       Calendar c = Calendar.getInstance();

       try {

           Date d = dateFormat.parse(date);

           c.setTime(d);

       } catch (ParseException e) {

       }

 

       return c.get(Calendar.DAY_OF_WEEK)-1;

 

    }

l         获得今天n天以后或者n天以前是那一天

    /**

     * 获得距离今天n天的那一天的日期 create date:2009-6-11 author:Administrator

     *

     * @param day

     * @return

     */

    public static String getDistanceDay(int day) {

 

       Calendar calen = Calendar.getInstance();

       calen.add(Calendar.DAY_OF_MONTH, day);

       Date date = calen.getTime();

 

       // 这里也个用SimpleDateFormatformat()进行格式化,然后以字符串形式返回格式化后的date

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

 

       return dateFormat.format(date);

    }

 

l         获得距离指定日期n天的那一天的日期

/**

     * 获得距离指定日期n天的那一天的日期 create date:2009-6-11 author:Administrator

     *

     * @param date

     *            格式:2009-6-11

     * @param day

     * @return

     */

    public static String getDistanceDay(String date, int day) {

 

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

       Date d;

       Calendar c =Calendar.getInstance();

       try {

           d = dateFormat.parse(date);

           c.setTime(d);

           c.add(Calendar.DATE, day);

       } catch (ParseException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

       return dateFormat.format(c.getTime());

    }

 

 

 

 /**

     * 获得给定两个日期相差度天数

     * create date:2009-6-23 author:Administrator

     *

     * @param date1

     *            参数格式:2009-06-21

     * @param date2

     */

    public static long getGapDays(String date1, String date2) {

 

       String[] d1 = date1.split("-");

       String[] d2 = date2.split("-");

       Calendar c = Calendar.getInstance();

 

       c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer

              .parseInt(d1[2]), 0, 0, 0);

       long l1 = c.getTimeInMillis();

       c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer

              .parseInt(d2[2]), 0, 0, 0);

       long l2 = c.getTimeInMillis();

 

       return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));

    }

 


Java常用类库之时间操作类——Date、Calendar、DateFormat、SimpleDateFormat及实例操作

学习目标  掌握Date类的使用 可以使用Calendar类取得一个完整的日期 掌握日期格式化的操作 可以使用SimpleDateFormat进行日期的格式化转换操作 编写取得日期的操作类 进一步掌握...
  • u013087513
  • u013087513
  • 2016年07月05日 11:32
  • 2201

java 日期相关Date、SimpleDateFormat、Calendar区分和使用

一、Date类 类 Date 表示特定的瞬间,精确到毫秒。用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负。 Date类中很多方法已经过时,...
  • kaishizhangcheng
  • kaishizhangcheng
  • 2016年09月02日 18:54
  • 3287

使用Date和SimpleDateFormat类表示时间

在程序开发中经常需要处理日期和时间的相关数据,此时我们可以使用java.util包中的Date类,这个类最主要的作用就是获取当前时间,我们来看一下Date类的使用; 使用Date类的默认无参构造方法创...
  • u013599426
  • u013599426
  • 2016年06月21日 22:14
  • 1291

Java常用类库——时间处理类Date、Calendar、GregorianCalendar以及日期格式化和计算

在Java中经常需要对时间进行操作,日期比较、格式转换、日期计算等。 经常使用的类有java.util.Date;java.sql.Date;java.util.Calendar;java.util....
  • Goskalrie
  • Goskalrie
  • 2016年02月29日 08:58
  • 2477

日期操作类(DateFormat与SimpleDateFormat)的区别和使用详解

日期操作类(DateFormat与SimpleDateFormat)的区别和实例SimpleDateFormat使用详解一、DateFormat类此类是一个日期的格式化类,用来格式化日期。具体日期可以...
  • xx326664162
  • xx326664162
  • 2016年08月15日 10:33
  • 2666

Java中Date类与Calendar类的用法和转化

Date类在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类...
  • c15522627353
  • c15522627353
  • 2015年07月24日 13:59
  • 1484

《黑马程序员》 日期Data类,日期格式化DateFormat,自定义格式化SimpleDateFormat的使用

public static void main(String[] args) { // getOsDateInstance(); // testDate(); // testDateTim...
  • xfgzss
  • xfgzss
  • 2014年03月06日 13:19
  • 1324

java 日期(Date),日历(Calendar),格式化(DateFormat)使用方法

Java 语言的Calendar,GregorianCalendar (日历),Date(日期)和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。 我们将讨论下面的类...
  • u010257060
  • u010257060
  • 2014年05月15日 20:48
  • 1971

【java】日期处理总结(一):Date 和 Calendar

Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算...
  • u011494050
  • u011494050
  • 2015年03月10日 18:15
  • 1956

Java时间类Date与Calendar的区别与使用

##Java中的日期和时间处理 Date类的使用方法 Calendar的使用方法
  • yoloyy
  • yoloyy
  • 2016年04月12日 22:17
  • 662
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA日期处理类总结:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat类
举报原因:
原因补充:

(最多只允许输入30个字)