Java中的时间

这篇文章主要是想介绍一下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就好了。

坚持原创技术分享,您的支持将鼓励我继续创作!