这篇文章主要是想介绍一下Java中与时间有关的类,主要是分下面两个部分
1. Date与SimpleDateFormat
2. Calendar
这当然只是我自己的分法,不过我觉得这样分了之后会记得比较清晰,当然Date和Calendar的对象之间也是可以相互转化的,并且转化的过程十分简单。下面进行分别介绍。
1. Date
Date类的对象表示的是从1970年1月1日00:00:00 GMT以来的毫秒数,例如下面的代码
Date d = new Date();
System.out.println(d.getTime());
就会直接打印出到现在为止,经过了多少毫秒。
Date d = new Date();
d.setTime(0);
System.out.println(d.toLocaleString());
而上面这段代码代表的就是起始时间,打印出来应该是 1970-1-1 8:00:00
,哎,不是应该是1970-1-1 00:00:00吗?为什么变了呢?好吧,这是因为我们在东八区,和设定的那个标准时间不在一个时区。
当然如果运行 System.out.println(d.getTime());
打印经过的毫秒数的话一定会是0。
2. SimpleDateFormat
这个类主要就是用来进行对日期类和字符串之间的相互转化,简单地说就是Date类对象和String字符串之间的互转。
2.1 将Date格式化为String
public static void formatDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd EEE HH:mm:ss");
Date d = new Date();
String s = sdf.format(d);
System.out.println(s);
}
上面的程序例子就是将当前日期时间转化为”yyyy/MM/dd EEE HH:mm:ss”这样的格式,之所以可以这样做,相当于事先有一种约定,如yyyy代表什么,MM又是代表什么,这个在后面再详细说明。
2.2 将String解析为Date
public static void parseDate() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd EEE HH:mm:ss");
String s = "2017/06/11 星期日 15:43:07";
Date d = sdf.parse(s);
System.out.println(d.toLocaleString());
}
这个就是将字符串解析为规定格式的Date对象。
2.3 格式约定符说明
其实上面的程序中新建SimpleDateFormat时传入的字符串是有特殊意义的,比如y就代表的是年,而年一般是4位,因此我们会连用4个y,同样的M也是,M代表的是月,而月我们一般习惯是用两位表示,因此就是MM,完整的表示放在下面吧,API中是可以查到的。
字母 日期或时间元素
G Era 标志符
y 年
M 年中的月份
w 年中的周数
W 月份中的周数
D 年中的天数
d 月份中的天数
F 月份中的星期
E 星期中的天数
a Am/pm 标记
H 一天中的小时数(0-23)
k 一天中的小时数(1-24)
K am/pm 中的小时数(0-11)
h am/pm 中的小时数(1-12)
m 小时中的分钟数
s 分钟中的秒数
S 毫秒数
z 时区
Z 时区
3.Calendar
现在Calendar是用的比较多的,因为Date类的很多方法多已经过时,不再推荐使用了,而Calendar设置和获取时间都非常简单,因此使用的比较多
3.1 Calendar实例的获取
Calendar是一个抽象类,因此是没有办法自己新建实例对象的,但是可以通过 getInstance()
方法获取子类的实例对象,当然,这样获取的就是当前时间日期了。
Calendar c = Calendar.getInstance();
3.2 Calendar实例字段值的获取
对于Calendar实例对象中时间和日期的获取,也是十分简单的,该类提供了 get(int field)
方法来进行获取,当然其中的参数field就是我们要获取的具体字段值了,比如年份、月份等。
如获取年份的时候,那就是应该为 int year = c.get(Calendar.YEAR);
其他的也是都会有相对应的字段。其实获取值得时候也可以传入数字,例如获取年份的时候,int year = c.get(1);
,这样其实也是可以的,但很明显可以看出,这样写的程序的可读性要差得多。因此不推荐这样写。
3.3 Calendar实例字段值的设置
实例字段值的获取可以通过相应的字段来得到,设置的时候也是同样可以,set(int field, int value)
就可以轻松办到,其中传入的第一个参数就是上面获取值时传入的字段,传入的第二个参数就是你想设定的值了。
4.Calendar和Date对象的互转
4.1 Date对象转为Calendar实例
Calendar c = Calendar.getInstance();
Date d = new Date();
c.setTime(d);
System.out.println(c);
4.2 Calendar对象转为Date实例
Calendar c = Calendar.getInstance();
Date d = c.getTime();
System.out.println(d);
Calendar和Date对象的相互转化就是这么简单。
5.说明
其实关于日期时间的使用,也不用特别去记忆,只是要知道是哪几个类,具体使用的时候多去查API就好了。