Java好用的时间类,别在用Date了

前言

假设你想获取当前时间,那么你肯定看过这样的代码

public static void main(String[] args) {

    Date date = new Date(System.currentTimeMillis());
    System.out.println(date.getYear());
    System.out.println(date.getMonth());
    System.out.println(date.getDate());
}

获取年份,获取月份,获取..日期?
运行一下

121
9
27

怎么回事?获取年份,日期怎么都不对,点开源码发现

/**
 * Returns a value that is the result of subtracting 1900 from the
 * year that contains or begins with the instant in time represented
 * by this Date object, as interpreted in the local
 * time zone.
 *
 * @return  the year represented by this date, minus 1900.
 * @see     java.util.Calendar
 * @deprecated As of JDK version 1.1,
 * replaced by Calendar.get(Calendar.YEAR) - 1900.
 */
@Deprecated
public int getYear() {
    return normalize().getYear() - 1900;
}

原来是某个对象值 减去了 1900,注释也表示,返回值减去了1900,难道我们每次获取年份需要在 加上1900?注释也说明了让我们 用Calendar.get()替换,并且该方法已经被废弃了。点开getMonth()也是一样,返回了一个0到11的值。getDate()获取日期?不应该是getDay()吗?老外的day都是sunday、monday,getDate()才是获取日期。再注意到这些api都是在1.1的时候被废弃了,私以为是为了消除getYear减去1900等这些歧义。

Calendar 日历类

public static void main(String[] args) {

    Calendar calendar =  Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int dom = calendar.get(Calendar.DAY_OF_MONTH);
    int doy = calendar.get(Calendar.DAY_OF_YEAR);
    int dow = calendar.get(Calendar.DAY_OF_WEEK);
    int dowim = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
    System.out.println(year+"年"+ month+"月");
    System.out.println(dom+"日");
    System.out.println(doy+"日");
    System.out.println(dow+"日");
    System.out.println(dowim);
}

打印(运行时间2021年10月27日 星期三 晴)

2021年9月
27日
300日
4日
4

你可能感兴趣的