本文目录:
当我们需要获取当前时间:
import java.util.Date;
public class Test {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}
result:
Sun Jan 14 22:10:03 CST 2018
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)。 |
日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
‘ | 文字定界符 | Delimiter |
“ | 单引号 | ` |
用 SimpleDateFormat 格式化日期
如:
import java.util.*;
import java.text.*;
public class test {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
//其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。注意大小写
System.out.println("Current Date: " + ft.format(dNow));
}
}
result:
Current Date: 星期日 2018.01.14 at 10:17:42 下午 CST
使用printf格式化日期
printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t
开头并且以下面表格中的一个字母结尾。
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | “年-月-日”格式 | 2007-10-27 |
D | “月/日/年”格式 | 10/27/07 |
r | “HH:MM:SS PM”格式(12时制) | 02:25:51 下午 |
T | “HH:MM:SS”格式(24时制) | 14:28:16 |
R | “HH:MM”格式(24时制) | 14:28 |
eg:
import java.util.Date;
public class test {
public static void main(String args[]) {
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",date);
}
}
result:
全部日期和时间信息:星期日 一月 14 22:23:37 CST 2018
年-月-日格式:2018-01-14
月/日/年格式:01/14/18
HH:MM:SS PM格式(12时制):10:23:37 下午
HH:MM:SS格式(24时制):22:23:37
HH:MM格式(24时制):22:23
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
例如,下面的程序会休眠5秒:
import java.util.*;
public class test {
public static void main(String args[]) {
try {
System.out.println(new Date( ));
Thread.sleep(1000*5); // 休眠5秒
System.out.println(new Date( ));
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
测量时间
import java.util.*;
public class test {
public static void main(String args[]) {
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!");
}
}
}
result:
Sun Jan 14 22:55:29 CST 2018
Sun Jan 14 22:55:32 CST 2018
Difference is : 3024
Calendar类
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
Calendar类中用以下这些常量表示不同的意义:
常量 | 描述 |
---|---|
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类中方法:
1. set设置
public final void set(int year,int month,int date)
如果只设定某个字段,例如日期的值,则可以使用如下set的重载方法:
public void set(int field,int value)
比如把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
add设置
比如把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算c1.add(Calendar.DATE, 10);
get获取
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); // 获得星期几(美式):1代表星期日、2代表星期一 int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代。
下面列出GregorianCalendar对象的几个构造方法:
构造函数 | 说明 |
---|---|
GregorianCalendar() | 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。 |
GregorianCalendar(int year, int month, int date) | 在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar |
GregorianCalendar(int year, int month, int date, int hour, int minute) | 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |
GregorianCalendar(int year, int month, int date, int hour, int minute, int second) | 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |
GregorianCalendar(Locale aLocale) | 在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。 |
GregorianCalendar(TimeZone zone) | 在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |
GregorianCalendar(TimeZone zone, Locale aLocale) | 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |
GregorianCalendar 类提供的一些有用的方法列表:
方法 | 说明 |
---|---|
void add(int field, int amount) | 根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。 |
protected void computeFields() | 转换UTC毫秒值为时间域值 |
protected void computeTime() | 覆盖Calendar ,转换时间域值为UTC毫秒值 |
boolean equals(Object obj) | 比较此 GregorianCalendar 与指定的 Object。 |
int get(int field) | 获取指定字段的时间值 |
int getActualMaximum(int field) | 返回当前日期,给定字段的最大值 |
int getActualMinimum(int field) | 返回当前日期,给定字段的最小值 |
int getGreatestMinimum(int field) | 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。 |
Date getGregorianChange() | 获得格里高利历的更改日期。 |
int getLeastMaximum(int field) | 返回此 GregorianCalendar 实例给定日历字段的最低的最大值 |
int getMaximum(int field) | 返回此 GregorianCalendar 实例的给定日历字段的最大值。 |
Date getTime() | 获取日历当前时间。 |
long getTimeInMillis() | 获取用长整型表示的日历的当前时间 |
TimeZone getTimeZone() | 获取时区。 |
int getMinimum(int field) | 返回给定字段的最小值。 |
int hashCode() | 重写hashCode. |
boolean isLeapYear(int year) | 确定给定的年份是否为闰年。 |
void roll(int field, boolean up) | 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 |
void set(int field, int value) | 用给定的值设置时间字段。 |
void set(int year, int month, int date) | 设置年、月、日的值。 |
void set(int year, int month, int date, int hour, int minute) | 设置年、月、日、小时、分钟的值。 |
void set(int year, int month, int date, int hour, int minute, int second) | 设置年、月、日、小时、分钟、秒的值。 |
void setGregorianChange(Date date) | 设置 GregorianCalendar 的更改日期。 |
void setTime(Date date) | 用给定的日期设置Calendar的当前时间。 |
void setTimeInMillis(long millis) | 用给定的long型毫秒数设置Calendar的当前时间。 |
void setTimeZone(TimeZone value) | 用给定时区值设置当前时区。 |
String toString() | 返回代表日历的字符串。 |