19:时间日期

时间日期


一、Date类

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

第一个构造函数使用当前日期和时间来初始化对象。

Date( )

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

Date(long date)

Date创建后可以调用以下方法:

序号 方法和描述
1 boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2 **boolean before(Date date)** 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3 **Object clone( )** 返回此对象的副本。
4 int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5 **int compareTo(Object obj)** 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6 **boolean equals(Object date)** 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7 long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8 int hashCode( ) 返回此对象的哈希码值。
9 **void setTime(long time)** 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10 **String toString( )** 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

Date的相关操作

1、获取当前时间

Java中获取当前日期和时间通过使用 Date 对象的 toString() 方法来打印当前日期和时间,如下所示:

public class Demo01 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.toString());
    }
}

2、使用 SimpleDateFormat 格式化日期

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。代码如下:

public class Demo02 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
        Date date1 = sdf.parse("2009-12-31");  //赋值给date
        Date date2 = sdf.parse("2019-01-31");
        System.out.println("date1 : " + sdf.format(date1));  //输出
        System.out.println("date2 : " + sdf.format(date2));
        
    }
}

3、日期比较

Java使用以下三种方法来比较两个日期:

  • 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。代码如下:

    public class Demo04 {
        public static void main(String[] args) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date1 = sdf.parse("2009-12-31");  //赋值给date
            Date date2 = sdf.parse("2019-01-31");
            System.out.println("date1 : " + sdf.format(date1));  //输出
            System.out.println("date2 : " + sdf.format(date2));
    
            long long1 = date1.getTime();
            long long2 = date2.getTime();
            System.out.println(long1 > long2);
        }
    }
    
  • 使用方法 before(),after() 和 equals()。代码如下:

    public class Demo02 {
        public static void main(String[] args) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date1 = sdf.parse("2009-12-31");  //赋值给date
            Date date2 = sdf.parse("2019-01-31");
            System.out.println("date1 : " + sdf.format(date1));  //输出
            System.out.println("date2 : " + sdf.format(date2));
    
            if (date1.after(date2)) {
                System.out.println("Date1 时间在 Date2 之后");
            }
    
            if (date1.before(date2)) {
                System.out.println("Date1 时间在 Date2 之前");
            }
    
            if (date1.equals(date2)) {
                System.out.println("Date1 时间与 Date2 相等");
            }
        }
    }
    
  • 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。

    public class Demo03 {
        public static void main(String[] args) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date1 = sdf.parse("2009-12-31");  //赋值给date
            Date date2 = sdf.parse("2019-01-31");
            System.out.println("date1 : " + sdf.format(date1));  //输出
            System.out.println("date2 : " + sdf.format(date2));
    
            if (date1.compareTo(date2) > 0) {
                System.out.println("Date1 时间在 Date2 之后");
            } else if (date1.compareTo(date2) < 0) {
                System.out.println("Date1 时间在 Date2 之前");
            } else if (date1.compareTo(date2) == 0) {
                System.out.println("Date1 时间与 Date2 相等");
            } else {
                System.out.println("程序怎么会运行到这里?正常应该不会");
            }
        }
    }
    

二、Calendar类

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

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

  • 创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
  • 创建一个指定日期的Calendar对象
//创建一个代表2020年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(20209, 6 - 1, 12);
  • Calendar类对象字段类型
常量 描述
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 星期几
  • Calendar类对象信息的设置

set设置

Calendar c1 = Calendar.getInstance();

调用

    ~~~java
    public final void set(int year,int month,int date)
    ~~~
c1.set(2009, 6, 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);

add设置

alendar c1 = Calendar.getInstance();

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

c1.add(Calendar.DATE, 10);

把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算

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

例:

public class Demo06 {
    public static void main(String[] args) {
        //获取当前的日历时间
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        Date da = calendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String accounttime = sdf.format(da);
        System.out.println(accounttime);
        //设置日期
        calendar.set(2011, 11, 11);
        // 获取月
        // 获取月
        int year = calendar.get(Calendar.YEAR);
        // 获取月
        int month = calendar.get(Calendar.MONTH);
        // 获取日
        int date = calendar.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");
    }
}
posted @ 2021-08-03 21:45  Happy*^_^*  阅读(132)  评论(0)    收藏  举报