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

前言 【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. * * @returnthe year represented by this date, minus 1900. * @seejava.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

    推荐阅读