Java常用API(4)----Date类、DateFormat类、Calendar类

一、Date类                                                                                                                                                        点击此处返回总目录

二、毫秒值的概念

三、Date类的构造方法

四、Date类的常用方法

五、DateFormat类、SimpleDateFormat类

六、SimpleDateFormat类的常用方法

七、Calendar类

八、日期、日历练习

 

 

一、Date类

Date 表示特定的瞬间,精确到毫秒。1秒=1000毫秒。

注意:是使用的util包下面的Date,不是sql包下面的Date。

 

 

二、毫秒值的概念

System.currentTimeMilis()            //方法返回long类型值,获取当前时间的毫秒值。System类在Java中不需要导包。得到的数是从公元                                                       1970年1月1日00:00:00到当前时间过了多少毫秒。

注意:时间和日期的计算必须依赖毫秒值,所以很重要。

 

例1:获取当前时间的毫秒值

package dateDemo;

public class Test {
    public static void main(String[] args) {
        long t = System.currentTimeMillis();
        System.out.println(t);                         //1534211981051
    }
}

 

 

三、Date类的构造方法

1. public Date()               //空参构造器。获取到的是当前操作系统中的时间和日期。如果把电脑上的日期改了,那么得到的时间也会相                                           应改变。【例1】

2. public Date(long date)   //有参构造函数。传入的是毫秒值,将毫秒值转化成对应的日期对象。【例2】

 

 

例1:

package dateDemo;

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);   //Tue Aug 14 10:19:14 CST 2018。输出的不是地址,说明 Date类重写过toString()。
                                                  //输出意义:周二  8月 14日  china stand time 
    }
}

例2:

package dateDemo;

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date date = new Date(0);
        System.out.println(date);   //Thu Jan 01 08:00:00 CST 1970 。有8个小时的时差。
    }
}

 

 

四、Date类的常用方法

1. public long getTime()                    //将Date表示的日期转成毫秒值。【例1】

2. public void setTime(long time)      //将Date对象的日期切换到毫秒值对应的日期。跟有参构造器效果相同。【例2】

 

 

例1:把Date表示的时间转化成毫秒值。

package dateDemo;

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);                  //Tue Aug 14 10:49:01 CST 2018
        long t1 = date.getTime();
        System.out.println(t1);                      //1534214941925。把date的时间转化成毫秒值。
        
        long t2=System.currentTimeMillis();
        System.out.println(t2);                      //1534214941947。说明这几句代码运行了22毫秒。
    }
}

例2:将Date对象的日期切换到毫秒值对应的日期。

package dateDemo;

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date date = new Date(0);
        System.out.println(date);            //Thu Jan 01 08:00:00 CST 1970
        
        long t1 = System.currentTimeMillis();
        date.setTime(t1);                        //将data的日期切换到t1对应的日期。
        System.out.println(date);            //Tue Aug 14 11:00:06 CST 2018
    }
}

 

 

五、DateFormat类、SimpleDateFormat类

日期格式化,变成我们想要的格式。在java.text包下面。

java.text.DateFormat类是一个抽象类。里面既有抽象方法,又有非抽象方法。实际中我们需要使用其子类java.text.SimpleDateFormat来创建对象。

 

 

六、SimpleDateFormat类的常用方法

1. public final String format(Date date)             //将一个 Date 格式化为日期/时间字符串。 

2. public Date parse(String source)                  //将字符串转成日期对象

 

1. format()方法的使用

如何对日期格式化:

       步骤1:创建SimpleDateFormat对象

                    在类的构造方法中,写入字符串的日期格式(自己定义)

       步骤2:SimpleDateFormat调用方法format对日期进行格式化

                    String format(Date date) 传递对象,返回字符串

日期格式:

       yyyy      年份

       MM        月份

       dd          月中的天数

       HH          0-23小时

       mm         分

       ss           秒

            

例:对日期进行格式化

package dateFormatDemo;

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

public class Test {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");        //步骤1
        String date =sdf.format(new Date());                                                                                     //步骤2
        System.out.println(date);                        //2018年08月14日 14时28分20秒
    }
}

 

2. parse()方法的使用

如何将字符串转化成Date对象:

       步骤1:创建SimpleDateFormat对象

                   构造方法中,指定日期格式

       步骤2:对象调用parse(),传递String,返回Date。

 

例:

package dateFormatDemo;

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

public class Test {
    public static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日,HH时mm分ss秒");     //步骤1
        Date date = sdf.parse("2018年08月14日,14时28分20秒");             //步骤2
        System.out.println(date);                                                                   //Tue Aug 14 14:28:20 CST 2018
    }
}

 

 

七、Calendar类

日历类。Calendar类是抽象类。需要使用他的子类对象。但是,Calendar类写了静态的方法getInstance()直接返回子类的对象。不需要new子类对象,直接通过静态方法获取即可。

1. public static Calendar getInstance()       //使用默认时区和语言环境获得一个日历。【例1】

2. public int get(int field)                               //返回日历字段的值。【例2】

3. public void set(int field, int value)             //设置日历字段。field是指哪个日历字段,value是设置的值。【例3】

4. public final void set(int year, int month, int date)     //直接传递三个整数。【例3】

5. public abstract void add(int field, int amount)          //日历的偏移。给定一个日历中的字段,进行偏移。【例4】

6. public final Date getTime()                                     //日历对象转化成日期对象。【例5】

 

例1:getInstance()方法的使用

package calendarDemo;

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();  //得到子类的对象。
        System.out.println(c);
    }
}

输为:java.util.GregorianCalendar[time=1534232887107,areFieldsSet=true,areAllFieldsSet=true,lenient=true,

          zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,

          transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=7,

          WEEK_OF_YEAR=33,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=226,DAY_OF_WEEK=3,

          DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=48,SECOND=7,MILLISECOND=107,

          ZONE_OFFSET=28800000,DST_OFFSET=0]

输出结果有一大串,含有很多信息。比如,2018年,今年的第7个月(从0开始数,即8月),今年的第33周,这个月的第3周等。

 

 

例2:get()方法的使用

package calendarDemo;

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();  //得到子类的对象。
        //获取年份
        int year = c.get(Calendar.YEAR);
        //获取月份
        int month = c.get(Calendar.MONTH)+1;  //他是0-11月,所以加1.
        //获取日
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + ":" + month + ":" + day);     //2018:8:14
        
    }
}

例3:set()的使用

package calendarDemo2;

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar ca = Calendar.getInstance();
        ca.set(Calendar.YEAR, 2022);
        System.out.println(ca.get(Calendar.YEAR));    //2022
        
        ca.set(2000, 1, 20);                                         //设置成2000年2月20日。
        System.out.println(ca.get(Calendar.YEAR)+":"+(ca.get(Calendar.MONTH)+1)+":"+ca.get(Calendar.DAY_OF_MONTH));                                                                                                                                                         //2000:2:20
    }
}

例4:日期的偏移

package calendarDemo2;

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar ca = Calendar.getInstance();
        System.out.println(ca.get(Calendar.YEAR));    //2018
        ca.add(Calendar.YEAR, 3);
        System.out.println(ca.get(Calendar.YEAR));    //2021
        ca.add(Calendar.YEAR, -4);                    
        System.out.println(ca.get(Calendar.YEAR));    //2017
    }
}

例5:日历对象转化成Date对象

package calendarDemo2;

import java.util.Calendar;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Calendar ca = Calendar.getInstance();

        Date date = ca.getTime();
        System.out.println(date);                   //Tue Aug 14 18:11:24 CST 2018
    }
}

 

 

八、日期、日历练习 

练习1:求自己出生了多少天

package Demo3;

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

public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println("请输入出生年与日:(yyyy-MM-dd)");
        String birthday = new Scanner(System.in).next();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(birthday);
        
        long birth = date.getTime();
        long now  = System.currentTimeMillis();
        
        int a =(int)((now -birth)/1000/60/60/24);
        System.out.println(a);
        
    }
}

练习2:判断是否为闰年

算法:如果当年2月有29天,说明为润年。否则不是。首先把时间设置到当年3月1日,然后往回走一天,看看是2月份的第几天。

package Demo4;

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        int year = 2000;
        
        Calendar ca = Calendar.getInstance();
        ca.set(year, 2, 1);                           //3月1日
        ca.add(Calendar.DAY_OF_MONTH, -1);
        System.out.println(ca.get(Calendar.DAY_OF_MONTH));
        if(ca.get(Calendar.DAY_OF_MONTH) == 29){
            System.out.println("yes");
        }else{
            System.out.println("no");
        }
        
    }

}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值