Date类
日期基本操作
java.util包提供了Date类来封装日期和时间数据
Date 类提供两个构造函数来实例化 Date 对象:
Date | 取得当前的系统时间 |
Date(long millisec) | 根据从1970年1月1日起经过的毫秒数取得日期时间 |
Date对象创建后,可调用以下方法:
序号 | 方法和描述 |
---|---|
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 |
boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 |
Object clone( ) 返回此对象的副本。 |
4 |
int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 |
int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 |
boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 |
long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 |
int hashCode( ) 返回此对象的哈希码值。 |
9 |
void setTime(long time) |
10 |
String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz代表时区。如:Tue Jan 23 11:42:11 CST 2018 |
注意:Date类的一些方法getYear()、getDay()等已过时,不推荐使用。
使用SimpleDateFormat格式化日期:
SimpleDateFormat是一个以语言敏感的方式来格式化和分析日期的类,SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。例如
1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 4 public class DateDemo { 5 public static void main(String[] args) { 6 7 Date date = new Date(); 8 SimpleDateFormat sdf = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 9 10 System.out.println(sdf.format(date)); 11 } 12 }
日期和时间的格式化编码
字母 | 描述 | 示例 |
---|---|---|
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 |
" | 单引号 | ` |
使用printf格式化日期:
printf可以轻松地格式化日期。使用两个字母的格式,它以%t开头并以下表中的一个字母结尾(该表同样适用于String.format()):
转 换 符 |
说 明 |
示 例 |
---|---|---|
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 |
y |
两位数年份 |
18 |
Y |
四位数年份 |
2018 |
m |
两位数月份 |
01 |
d |
当前日期的日号 |
23 |
B |
月份的完整名 |
一月 |
b |
月份的简称 |
一月 |
H |
24小时制时间的时 |
13 |
I |
12小时制时间的时 |
12 |
M |
时间分 |
02 |
S |
时间秒 |
01 |
L |
秒中的毫秒数 |
994 |
p |
上午还是下午 |
下午 |
A |
星期的全称 |
星期二 |
a |
星期的简称 |
星期二 |
例:
1 import java.util.Date; 2 3 public class DateDemo { 4 5 public static void main(String args[]) { 6 // 初始化 Date 对象 7 Date date = new Date(); 8 9 //c的使用 10 System.out.printf("全部日期和时间信息:%tc%n",date); 11 //f的使用 12 System.out.printf("年-月-日格式:%tF%n",date); 13 //d的使用 14 System.out.printf("月/日/年格式:%tD%n",date); 15 //r的使用 16 System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date); 17 //t的使用 18 System.out.printf("HH:MM:SS格式(24时制):%tT%n",date); 19 //R的使用 20 System.out.printf("HH:MM格式(24时制):%tR",date); 21 } 22 }
如果需要对日期进行多次引用可利用一个格式化字符串指出被引用的参数的索引。参数必须跟在%后面并以$结束,如:
1 import java.util.Date; 2 3 public class DateDemo { 4 5 public static void main(String args[]) { 6 // 初始化 Date 对象 7 Date date = new Date(); 8 9 // 使用toString()显示日期和时间 10 System.out.printf("%1$s %2$tB %2$td, %2$tY", 11 "Due date:", date); 12 } 13 }
或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:
1 import java.util.Date; 2 3 public class DateDemo { 4 5 public static void main(String args[]) { 6 // 初始化 Date 对象 7 Date date = new Date(); 8 9 // 显示格式化时间 10 System.out.printf("%s %tB %<te, %<tY", 11 "Due date:", date); 12 } 13 }
解析字符串为时间:
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 5 public class DateDemo { 6 public static void main(String[] args) { 7 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 9 String input = "1998-05-09"; 10 try { 11 Date date = sdf.parse(input); 12 System.out.printf("%tF%n", date); 13 } catch (ParseException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 }
输出结果为:
Clendar类
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
Calendar c = Calendar.getInstance();//默认是当前日期
//创建一个代表2009年6月12日的Calendar对象 Calendar c1 = Calendar.getInstance(); c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型
Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
常量 | 描述 |
---|---|
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 | 星期几 |