zoukankan      html  css  js  c++  java
  • 关于JAVA学习_Date类

    一、 Date类

     Date类对象的创建:

    1、创建一个当前时间的Date对象

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

      Date d = new Date();

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

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

    //创建一个代表2020年9月28号的Date对象

    Date d1 = new Date(2020-1900, 9-1, 28); (注意参数的设置)

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

    如:

        Date d2 =  new Date(2020-1900, 9-1, 28);

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

            int year = d2.getYear() + 1900;

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

            int month = d2.getMonth() + 1;

            //获得日期

            int date = d2.getDate();

            //获得小时

            int hour = d2.getHours();//不设置默认为0

            //获得分钟

            int minute = d2.getMinutes();

            //获得秒

            int second = d2.getSeconds();

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

    int day = d2.getDay();

    二、Calendar类

        Calendar类的功能要比Date类强大很多,可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题。而且在实现方式上也比Date类要复杂一些

    1、Calendar类对象的创建

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

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

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

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

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

    //创建一个代表2014年5月9日的Calendar对象

    Calendar c1 = Calendar.getInstance();

    c1.set(2014, 5 - 1, 9);//调用:public final void set(int year,int month,int date)

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

     1)Calendar类对象信息的设置

     A、Set设置

           如:Calendar c1 = Calendar.getInstance();

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

       c1.set(2020-1900, 9-1, 28);//把Calendar对象c1的年月日分别设这为:2020、9、28

      B、利用字段类型设置

      如果只设定某个字段,例如日期的值,则可以使用public void set(int field,int value)

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

         c1.set(Calendar.DATE,10);

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

         c1.set(Calendar.YEAR,2015);

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

    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——星期几

     1 package demo1;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Calendar;
     5 import java.util.Date;
     6 
     7 public class TestDate {
     8 
     9     public static void main(String[] args) {
    10         
    11         //date:获取当前系统时间
    12         Date date=new Date();
    13         System.out.println(date);//年-月-日  
    14         
    15         //SimpleDateFormat:对日期进行格式化
    16         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    17         String date1=sdf.format(date);
    18         System.out.println(date1);
    19         
    20         
    21         Calendar c=Calendar.getInstance();//创建了一个日历对象
    22         //设置
    23 //        c.set(2020, 9, 29, 9, 10, 21);
    24         //获取年
    25         int y=c.get(Calendar.YEAR);
    26         //获取月  0-11
    27         int month=c.get(Calendar.MONTH)+1;
    28         //获取日
    29         int day=c.get(Calendar.DAY_OF_MONTH);
    30         //获取时
    31         int h=c.get(Calendar.HOUR_OF_DAY);
    32         //获取分
    33         int m=c.get(Calendar.MINUTE);
    34         //获取秒
    35         int s=c.get(Calendar.SECOND);
    36         System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s);
    37 
    38     }
    39 
    40 }

     对日期进行格式化和巧妙计算方法运行时间,方便测试程序:

     1 package demo1;
     2 
     3 import java.text.ParseException;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Calendar;
     6 import java.util.Date;
     7 
     8 public class TestDate {
     9 
    10     public static void main(String[] args) throws ParseException {
    11         
    12         //date:获取当前系统时间
    13         Date date=new Date();
    14         System.out.println(date);//年-月-日  
    15         
    16         //SimpleDateFormat:对日期进行格式化  调用format方法
    17         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    18         String date1=sdf.format(date);
    19         System.out.println(date1);
    20         
    21         
    22         Calendar c=Calendar.getInstance();//创建了一个日历对象
    23         //设置
    24 //        c.set(2020, 9, 29, 9, 10, 21);
    25         //获取年
    26         int y=c.get(Calendar.YEAR);
    27         //获取月  0-11
    28         int month=c.get(Calendar.MONTH)+1;
    29         //获取日
    30         int day=c.get(Calendar.DAY_OF_MONTH);
    31         //获取时
    32         int h=c.get(Calendar.HOUR_OF_DAY);
    33         //获取分
    34         int m=c.get(Calendar.MINUTE);
    35         //获取秒
    36         int s=c.get(Calendar.SECOND);
    37         System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s);
    38 
    39         //日期字符串转换为Date类型  注意格式一致 java
    40         String time="2020-10-8 15:40:15 333";
    41         SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    42         Date time1 = sdf2.parse(time);
    43         System.out.println(time1);
    44         System.out.println("-------------------");
    45         //获取自1970年 1月1号到现在的总毫秒值
    46         long nowTime = System.currentTimeMillis();
    47         System.out.println(nowTime);
    48         
    49         long begin = System.currentTimeMillis();
    50         print();
    51         long end = System.currentTimeMillis();
    52         System.out.println("方法耗时"+(end-begin)+"毫秒");
    53     }
    54     //需求:统计一个方法执行所需的毫秒值
    55     public static void print(){
    56         for(int i=0;i<1000;i++){
    57             System.out.println("i="+i);
    58             
    59         }
    60         
    61         
    62     System.out.println("---------");    
    63     //获取昨天此时的时间
    64     Date time2 = new Date(System.currentTimeMillis()-1000*60*60*24);
    65     SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    66      String ye = sdf2.format(time2);
    67      System.out.println("昨天的此时时间为"+ye);
    68     }
    69     
    70     
    71 
    72 }

     C、Add设置(可用与计算时间)

      Calendar c1 = Calendar.getInstance();

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

      c1.add(Calendar.DATE, 10);

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

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

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

    2)、Calendar类对象信息的获得(使用get())

     Calendar c1 = Calendar.getInstance();

    // 获得年份

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

    // 获得月份

    int month = c1.get(Calendar.MONTH) + 1;(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);

    三、 GregorianCalendar类

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

    1、GregorianCalendar类对象的创建

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

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

    在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。

    GregorianCalendar(int year, int month, int dayOfMonth) 

    GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。

    GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

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

     GregorianCalendar gc = new GregorianCalendar();

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

    GregorianCalendar gc = new GregorianCalendar(2014,6-1,19);

    3、另外:GregorianCalendar有一个方法:boolean isLeapYear(int year) 确定给定的年份是否为闰年

    四、DateFormat类和SimpleDateFormat类

      public class SimpleDateFormat extends DateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。(日期时间输出的工具类)

    它允许进行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。所以SimpleDateFormat类可以实现:String 到 Date,Date到String的互转

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

    /* Date Long Calendar*/

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

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

    Date d= new Date();

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

    long dLong = d.getTime();

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

    long time = 1290876532190L;

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

    Date d2 = new Date(time);

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

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

    Calendar c = Calendar.getInstance();

    long t1 = c.getTimeInMillis(); 

    // 将long转换为Calendar对象

    Calendar c1 = Calendar.getInstance();

    long t = 1252785271098L;

    c1.setTimeInMillis(t1);

    /* String Date Calendar 三者之间的相互转换*/

     

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

    //1 .将Calendar对象转换为Date(c.getTime())

    Calendar c = Calendar.getInstance();

    Date d = c.getTime();

    // 2.将Date转换为Calendar对象(s.setTime(date))

    Calendar c1 = Calendar.getInstance();

    Date d1 = new Date();

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

    c1.setTime(d1);

    String  Calendar之间的转换

    //1.Date 转化String

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

    String dateStr=sdf.format(new Date());

    //2.String 转化Date

    String str="2010-5-27";

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

    Date birthday = sdf.parse(str);

    Date个Calendar对象之间的转换

    //1.Date 转化为Calendar

    Calendar calendar = Calendar.getInstance();

    calendar.setTime(new Date());

    //2.Calenda转换为Date

     Calendar calendar = Calendar.getInstance();

     Date date =calendar.getTime();

    Date和String对象之间的转换

    //1.Calendar 转化 String

      Calendar calendat = Calendar.getInstance();

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;

      String dateStr = sdf.format(calendar.getTime());

    //2.String 转化Calendar

    String str="2010-5-27";

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

    Date date =sdf.parse(str);

    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);

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

      l、判断是否是闰年

      

     1   /**
     2 
     3      * 给定一个年份判断该年份是否为闰年
     4 
     5      */
     6 
     7     public static boolean isLeapYear(int year) {
     8 
     9        GregorianCalendar calendar = new GregorianCalendar();
    10 
    11        return calendar.isLeapYear(year);
    12 
    13     }
    14 
    15  

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

      

     1   /**
     2 
     3      * 利用SimpleDateFormat获取当前日期的字符串表示形式 格式:2009-5-05
     4 
     5      */
     6 
     7     public static String getCurrentDate() {
     8 
     9        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    10 
    11        return dateFormat.format(System.currentTimeMillis());
    12 
    13     }

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

      

     1   /**
     2 
     3      * 给出任意一个年月日得到该天是星期几
     4 
     5      */
     6 
     7     public static int getWeek(String date) {
     8 
     9        // 注意参数的大小写格式
    10 
    11         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    12 
    13        Calendar c = Calendar.getInstance();
    14 
    15        try {
    16 
    17            Date d = dateFormat.parse(date);
    18 
    19            c.setTime(d);
    20 
    21        } catch (ParseException e) {
    22 
    23        }
    24 
    25        return c.get(Calendar.DAY_OF_WEEK)-1;
    26 
    27     }

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

       

     1  /**
     2 
     3      * 获得距离今天n天的那一天的日期
     4 
     5      */
     6 
     7     public static String getDistanceDay(int day) {
     8 
     9        Calendar calen = Calendar.getInstance();
    10 
    11        calen.add(Calendar.DAY_OF_MONTH, day);
    12 
    13        Date date = calen.getTime();
    14 
    15        // 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的date
    16 
    17        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    18 
    19        return dateFormat.format(date);
    20 
    21 }

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

       

     1  /**
     2 
     3      * 获得距离指定日期n天的那一天的日期
     4 
     5      */
     6 
     7     public static String getDistanceDay(String date, int day) {
     8 
     9        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    10 
    11        Date d;
    12 
    13        Calendar c =Calendar.getInstance();
    14 
    15        try {
    16 
    17            d = dateFormat.parse(date);
    18 
    19            c.setTime(d);
    20 
    21            c.add(Calendar.DATE, day);
    22 
    23  
    24 
    25        } catch (ParseException e) {
    26 
    27            e.printStackTrace();
    28 
    29        }
    30 
    31        return dateFormat.format(c.getTime());
    32 
    33     }

      6、获得给定两个日期相差的天数

      

     1   /**
     2 
     3      * 获得给定两个日期相差的天数
     4 
     5      *
     6 
     7      */
     8 
     9     public static long getGapDays(String date1, String date2) {
    10 
    11        String[] d1 = date1.split("-");
    12 
    13        String[] d2 = date2.split("-");
    14 
    15        Calendar c = Calendar.getInstance();
    16 
    17        c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer
    18 
    19               .parseInt(d1[2]), 0, 0, 0);
    20 
    21        long l1 = c.getTimeInMillis();
    22 
    23        c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer
    24 
    25               .parseInt(d2[2]), 0, 0, 0);
    26 
    27        long l2 = c.getTimeInMillis();
    28 
    29        return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));
    30 
    31     }
    32 
    33  
    34 ]

     https://www.cnblogs.com/gu-bin/p/10022703.html

  • 相关阅读:
    海岛争霸
    hihocoder 1089 最短路径·二:Floyd算法
    hihocoder1081 :最短路径·一
    [蓝桥杯][历届试题]蚂蚁感冒
    牛客网Wannafly挑战赛27 A: 灰魔法师
    hdu1875:畅通工程再续
    hdu1863:畅通工程
    hdu1879:继续畅通工程
    hdu1233:还是畅通工程
    洛谷 P1546 最短网络 Agri-Net
  • 原文地址:https://www.cnblogs.com/yumu77/p/13752186.html
Copyright © 2011-2022 走看看