Date类
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
Date类的创建
System 类中的静态方法public static long currentTimeMillis()可以获取系统当前的时间,得到的是从1970年0时0分0秒到目前所走过的毫秒数。可以根据该方法返回的数字用Date类的构造方法Data(long time)创建一个本地日期对象。
//第一个构造函数使用当前日期和时间来初始化对象
Date( );
//第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数(1秒=1000毫秒)
Date(long millisec);
package Liu;
import java.util.Date;
public class ArrayMethodDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
long time = System.currentTimeMillis();
Date d = new Date(time);
System.out.println(d);
}
}
输出
Fri Feb 22 21:33:59 CST 2019
使用 SimpleDateFormat 格式化日期
Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年
如Fri Feb 22 21:33:59 CST 2019
但是我们可能不习惯这种方式,想着按照“年 月 星期 日”或者“年 月 星期 日 小时 分 秒”这种格式
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ArrayMethodDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date nowTime = new Date();
System.out.println("当前时间为:" + nowTime.toString());
SimpleDateFormat matter1 = new SimpleDateFormat("'Beijing Time':yyyy-MM-dd");
System.out.println("当前时间为:" + matter1.format(nowTime));
SimpleDateFormat matter2 = new SimpleDateFormat("'Beijing Time':yyyy-MM-dd HH:mm::ss(a)(EE)");
System.out.println("当前时间为:" + matter2.format(nowTime));
}
}
输出:
当前时间为:Fri Feb 22 21:50:12 CST 2019
当前时间为:Beijing Time:2019-02-22
当前时间为:Beijing Time:2019-02-22 21:50::12(下午)(星期五)
其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
使用printf格式化日期
package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ArrayMethodDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR%n",date);
}
}
全部日期和时间信息:星期五 二月 22 21:53:59 CST 2019
年-月-日格式:2019-02-22
月/日/年格式:02/22/19
HH:MM:SS PM格式(12时制):09:53:59 下午
HH:MM:SS格式(24时制):21:53:59
HH:MM格式(24时制):21:53
Date对象常用的方法
方法名 | 描述 |
---|---|
boolean after(Date date) | 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
boolean before(Date date) | 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
Object clone( ) | 返回此对象的副本。 |
int compareTo(Date date) | 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
int compareTo(Object obj) | 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
boolean equals(Object date) | 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
long getTime( ) | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
int hashCode( ) | 返回此对象的哈希码值。 |
void setTime(long time) | 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期 |
String toString( ) | 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
测量时间
package Liu;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ArrayMethodDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ));
Thread.sleep(5*60*10);
System.out.println(new Date( ));
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff + "毫秒");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
输出
Fri Feb 22 21:59:40 CST 2019
Fri Feb 22 21:59:43 CST 2019
Difference is : 3015毫秒
Calendar类
Calendar类在java.util包中,其static方法getInstance()可以初始化一个日历对象。Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,
在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
Calendar类的初始化
其static方法getInstance()可以初始化一个日历对象
//默认是当前日期
Calendar c1 = Calendar.getInstance();
//创建一个代表2019年2月22日的Calendar对象
Calendar c2 = Calendar.getInstance();
c2.set(2019, 2, 22);
Calendar类中有很多字段。
filed | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE(Calendar.DAY_OF_MONTH) | 日期 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 一周之内的星期几 |
Calendar类对象信息的设置
Calendar类对象信息的设置有Set设置和Add设置。
例如set设置
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:public void set(int field,int value)
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 1999);
将当前日历对象的年份字段设置为1999年
Add设置
Calendar calendar = Calendar.getInstance();
calendar.add(field, amount);
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);其他字段同理。
Calendar类对象信息的获得
说了这么久,如何获取一个日历对象的信息还不知道怎么做呢,那就是get方法
get(field the given calendar field),返回int类型
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
输出
2019
官方文档解释:get方法Returns the value of the given calendar field. In lenient mode,all calendar fields are normalized.
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendar类
Calendar类实现了公历日历,是一个抽象类,GregorianCalendar是Calendar类的一个具体实现,是Calendar类的一个子类。这里不详细介绍,具体参见GregorianCalendar类的具体描述