Date类常用方法总结

Date类

Java中Date类型有两种:java.util包下的Date类,java.sql包下的Date类

两种Date类的区别和联系

java.util.Date为java.sql.Date类的父类

public class Date extends java.util.Date {
    
    ......}

java.sql.Date通常用于表示数据库的日期,相比起java.util.Date,它只包含年、月、日,而不包含具体的时间。

过时方法

在JDK 1.1之前, Date类还有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和秒值。 它还允许格式化和解析日期字符串。 不幸的是,这些功能的API不适合国际化。
在JDK1.1版本以后,这些用于获取年、月、日、小时、分钟、和秒值的方法被标记为了过时方法

@Deprecated//注释为过时方法,不推荐使用
public int getDay() {
    
    
    return normalize().getDayOfWeek() - BaseCalendar.SUNDAY;
}

java.util.Date

构造方法

jdk1.1版本之后,构造方法推荐使用(没过时)的就只有两种Date()和Date(long date)两种

public Date() {
    
    //调用Date(long date)方法传递的参数为当前系统时间自1970年1月1日08:00:00 GMT(默认时区东八区)以来的经过毫秒数
    this(System.currentTimeMillis());
}
public Date(long date) {
    
    //将Date类自1970年1月1日00:08:00 GMT(默认时区东八区)以来的经过毫秒数设置为date,可以为负数,表示过去的时间
    fastTime = date;
}

常用方法

  • setTime(long time)方法
    • 将此 Date对象设置为表示格林威治标准时间1970年1月1日00:08:00之后的 time毫秒的时间点。
    • 无返回值
  • getTime()方法
    • 返回自此 Date对象表示的1970年1月1日00:08:00 以来的毫秒数。
    • 返回值为long
  • equals()方法
    • 此方法是重写从Object中继承而来的equals方法
    • 通过两个Date对象自格林尼治时间以来经过的毫秒数判断两个Date对象是否相等
    • 返回值为boolean
  public boolean equals(Object obj) {
    
    
    return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
  • toString()方法
 Fri Oct 02 13:35:08 CST 2020
  • 将此Date对象转换为以下形式的String : dow mon dd hh:mm:ss zzz yyyy
  • dow:星期几( Sun, Mon, Tue, Wed, Thu, Fri, Sat )。
    mon:( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )。
    dd:该月的第几天( 01到31 ),以小数点后两位数。
    hh:一天中的小时( 00到23 ),以小数点后两位数。
    mm:小时内的分钟( 00到59 ),以小数点后两位数。
    ss:分钟内的第二个( 00到61 ),两位十进制数字。
    zzz:时区,默认为东八区,显示的是CST,China Standard Time,又名中国标准时间,是中国的标准时间。在时区划分上,属东八区,比协调世界时早8小时。 如果时区信息不可用,则zzz为空 - 也就是说,它根本不包含任何字符。
    yyyy:年份

java.sql.Date

构造方法

注意:该Date没有不带参数的构造方法,初始化时必须传入参数。

public Date(long date) {
    
    //调用父类(java.util.Date)的构造方法设置毫秒数
    // If the millisecond date value contains time info, mask it out.
    super(date);

}

常用方法

由于java.sql.Date继承了java.util.Date类,它拥有java.util.Date类中的setTime(long time)、getTime()、equals()等方法此处不再重复。

  • toString()方法
    • 以日期转义格式yyyy-mm-dd格式化日期。
    • 返回值为String,返回一个yyyy-mm-dd格式的字符串。
    • 调用父类Date的已过时方法getYear()、getMonth()和getDate()来获取年、月、日。
  @SuppressWarnings("deprecation")
public String toString () {
    
    
    int year = super.getYear() + 1900;
    int month = super.getMonth() + 1;
    int day = super.getDate();

    char buf[] = new char[10];
    formatDecimalInt(year, buf, 0, 4);
    buf[4] = '-';
    Date.formatDecimalInt(month, buf, 5, 2);
    buf[7] = '-';
    Date.formatDecimalInt(day, buf, 8, 2);

    return new String(buf);
}
  • valueOf​(String s)方法
    • 该方法为静态方法
    • 将JDBC日期转义格式的字符串转换为 Date值。
    • 如果给定的日期不是JDBC日期转义格式(yyyy-[m]m-[d]d) 会抛出异常IllegalArgumentException
    • 返回一个Date对象
public static Date valueOf(String s) {
    
    
    if (s == null) {
    
    
        throw new java.lang.IllegalArgumentException();
    }
    final int YEAR_LENGTH = 4;
    final int MONTH_LENGTH = 2;
    final int DAY_LENGTH = 2;
    final int MAX_MONTH = 12;
    final int MAX_DAY = 31;
    Date d = null;

    int firstDash = s.indexOf('-');//第一个"-"的位置
    int secondDash = s.indexOf('-', firstDash + 1);//第二个"-"的位置
    int len = s.length();//String总长度

    if ((firstDash > 0) && (secondDash > 0) && (secondDash < len - 1)) {
    
    
        if (firstDash == YEAR_LENGTH &&
                (secondDash - firstDash > 1 && secondDash - firstDash <= MONTH_LENGTH + 1) &&
                (len - secondDash > 1 && len - secondDash <= DAY_LENGTH + 1)) {
    
    
            int year = Integer.parseInt(s, 0, firstDash, 10);//将0~第一个"-"位置的字符串转换为数字
            int month = Integer.parseInt(s, firstDash + 1, secondDash, 10);//将第一个"-"位置~第二个"-"位置的字符串转换为数字
            int day = Integer.parseInt(s, secondDash + 1, len, 10);//将第二个"-"位置到末尾字符串转换为数字

            if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) {
    
    
                d = new Date(year - 1900, month - 1, day);//用已过时的构造方法Date​(int year, int month, int day)创建对象
            }
        }
    }
    if (d == null) {
    
    
        throw new java.lang.IllegalArgumentException();
    }

    return d;

}
  • valueOf​(LocalDate date)方法

    • 该方法为静态方法
    • 从LocalDate对象获得Date的实例, Date具有相同的年,月和日值作为给定的LocalDate 。
      提供的LocalDate被解释为本地时区的本地日期。
    • 如果date为空会抛出异常NullPointerException
    • 返回转换后的Date对象
  • toLocalDate()方法

    • 使用此 Date对象中的年,月和日创建 LocalDate实例。
    • 是JDK1.8新添加的方法
    • 返回一个LocalDate对象

猜你喜欢

转载自blog.csdn.net/tuziud233/article/details/108879337