Date --具体类
1.Date类中很多方法都标有删除线,是因为Date类在设计中有缺陷,如getYear指的是1970年以来的秒数,月份是从0开始的。事实上,不止Date类,Java的日期时间相关类都存在设计问题。Java的日期类库有些混乱.
2.Date 的显示(实际上是 toString() 方法)描述了这些信息,但 Java 并不建议我们用这种方式直接来构件 Date 对象。因此我们需要找出哪个对象可以实现这个需求。这就是我们下面就要讲述的 Calendar 对象的功能。
3.记住 Date 只是一个对 long 值(基于 GMT 时区)的对象封装。它所表现出来的年/月/日小时:分钟时区的时间表述,只是它的 toString() 方法所提供的。千万不要为这个假象所迷惑。
Date date = new Date();
System.out.println(date.getTime());//1670599545104
Calendar —抽象类
就是对Date类的设计和优化
子类 GregorianCalendar 则实现了 Calendar 中的相关抽象方法。
GregorianCalendar
该方法的使用方法都和抽象类 Calendar 一致。 但是又扩展了一些构造方法。 便易使用。
Date 中过时的被取代方法
int getDate() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
int getDay() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
int getHours() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
int getMinutes() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
int getMonth() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
int getSeconds() 已过时。从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
基础和常用
Calendar calendar = Calendar.getInstance();
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1);//月份 +1
。。。。。。
Calendar c=Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
int day=c.get(Calendar.DAY_OF_MONTH);
int weekday=c.get(Calendar.DAY_OF_WEEK);
int hour=c.get(Calendar.HOUR);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.SECOND);
int miliSecond=c.get(Calendar.MILLISECOND);
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
//修改
c.add(hour, 12);
System.out.println(c.get(Calendar.HOUR));
//设置
c.set(Calendar.YEAR, 2000);
System.out.println(c.get(Calendar.YEAR));
c.set(2018, 5, 2);
year =c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
SimpleDateFormat
就是自定义显示日期的格式,比方说年份在最后或者最前的定义
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
Date date = new Date(System.currentTimeMillis());
//定义模板 EEEE-MMMM-dd-yyyy 和 时间中加字符@ EEEE-MMMM-'@@'dd-yyyy
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
System.out.println(bartDateFormat.format(date));//星期五-十二月-09-2022
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-'@@'dd-yyyy");
System.out.println(bartDateFormat.format(date));//星期五-十二月-@@09-2022
//format()函数底层调用 具体看API
format(Date date, StringBuffer toAppendTo, FieldPosition pos)
将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。
public final String format(Date date)
{
return format(date, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}