Date类
什么是date:
Date表示特定的瞬间,精确到毫秒。
我们在Api手册查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
我们要获取当前时间,例:
Date date1=new Date(); //获乡前基于环境的时间
System.out.println(date1);
运行结果为:
Fri为星期五,Dec为十二月,02就是二号,后面是时分秒,CST代表东八区,然后是2022年
提示:由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒
我们也可以人为的制造一个时间为2022年12月2号:
Date date2 = new Date(2022,12,2);
System.out.println(date2);
运行结果如下:
我们可以看到结果并不是我们想象的那样。
原因是什么呢?
原来他的时间并不是以公元00年为起点的,而是year加上1900。
我们可以看一下Date类返回值的表现形式:
通过这个,我们可以看到标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来指定毫秒数
如果我们要计算现在时间到1970 年 1 月 1 日 00:00:00毫秒值:
Long time = date1.getTime(); //计算当前时间距离1970年1月1日 80:00:00 的 秒-------时间戳
System.out.println(time);
结果如下:
我们计算从1970年1月1日 08:00:00(东八区)经过了60000毫秒时间之后是什么时间:
Date date2=new Date(60000); //创建一个距离1970年1月1日 08:00:00 (东八区) 经过了多少毫秒的一个时间
System.out.println(date2);
结果如下:
SimpleDateFormat类
什么是SimpleDateFormat类:
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat
使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat
中的 getTimeInstance
、getDateInstance
或 getDateTimeInstance
来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用 applyPattern
方法来修改格式模式。有关使用这些方法的更多信息,请参阅 DateFormat
。
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date
对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。
DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
DateFormat是一个抽象类 , 一般使用它的的子类SimpleDateFormat类来实现。
我们在这个SimpleDateFormat
类里面定义了一个模式:
我们来看一下运用这个模式输出的时间:
//SimpleDateFormat 用来实现 日期 和 字符串 之间的相互转换
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //建日期格式化类的对象,指定格式符号
Date date1=new Date();//获取当前系统时间
运行结果如下:
这种方式就比上面那种格式好认的多
我们这个类里面有这些方法:
在这些方法中,我们主要运用format方法和parse方法:
//把 日期 转换成指定式的 字符串
String format = sdf.format(date1);
System.out.println(format);
//把指定格式的 字符串 转换成 日期
String time="2000/10/20 8:20:38";
Date date2 = sdf.parse(time);
System.out.println(date2);
Calendar类
什么是Calendar类:
Calendar 是日历类在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的获取方式
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:Calendar静态方法
public static calendar getInstance0): 使用默认时区和语言环境获得一个日历
常用方法:
根据Calendar类的API文档,常用方法有:
- public int get(int field): 返回给定日历字段的值。
- public void set(int field,int value): 将给定的日历字段设置为给定值。
- public abstract void add(int fied,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public DategETime0): 返回一个表示此Calendar时间值 (从历元到现在的毫秒偏移量)的Date对象
部分方法:
我们挑几个重要的代码向大家演示一下:
public static void main(String[] args) {
//Calendar 类是一个抽象类,可以通过Calendar 的 getInstance 方法返回一个 Calendar 对象
Calendar calendar=Calendar.getInstance();
Date date1=calendar.getTime();//获取当前系统的时间
System.out.println(date1);
long timeInMillis = calendar.getTimeInMillis();
System.out.println("当前时间的毫秒值:"+timeInMillis);
TimeZone timeZone = calendar.getTimeZone();
System.out.println("时区"+timeZone);
//get方法可以根据指定的日历字段,获取时间对应的值
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("年份:"+year+" "+"月份:"+(month+1)+" "+"日期:"+date+" "+"本年的第:"+dayOfYear+"天");//0-11 表示1-12月
//可以获取 指定日期月份0-11 表示1-12月
calendar.set(2000, 9, 28, 15,59,61);
Date date2 = calendar.getTime();
System.out.println(date2);
}
效果如图: