码迷,mamicode.com
首页 > 其他好文 > 详细

时间日期处理date,Calendar类

时间:2015-04-14 09:48:20      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

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代表星期1、2代表星期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代表星期1、3代表星期二,以此类推)

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

 

 

3、         GregorianCalendar

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

GregorianCalendar类对象的创建

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


创建一个代表当前日期的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")的参数间隔符号可以随意设置的,如:

       // yyyy年MM月dd日 返回格式:2009年06月09日

       // 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代表星期1,2代表星期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();

 

       // 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的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));

    }

 

时间日期处理date,Calendar类

标签:

原文地址:http://www.cnblogs.com/yikeyizhan/p/4424040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!