JAVA中的时间操作知识梳理

JAVA中的时间操作

java中的时间操作不外乎这四种情况:

1、获取当前时间

2、获取某个时间的某种格式

3、设置时间

4、时间的运算

好,下面就针对这四种情况,一个一个搞定。

 

一、获取当前时间

 

有两种方式可以获得,第一种,使用Date类。

j2SE的包里有两个Date类,一个是java.sql.Date,一个是java.util.Date

这里,要使用java.util.Date。获取当前时间的代码如下

Date date = new Date();

date.getTime();(返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。)

还有一种方式,使用System.currentTimeMillis();

 

这两种方式获得的结果是一样的,都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数。

当前的时间得到了,但实际的应用中最后往往不是要用这个long型的东西,用户希望得到的往往是一个时间的字符串,比如“2006年6月18号”,或“2006-06-18”,老外可能希望得到的是“06-18-2006”,诸如此类等等。这就是下一个要解决的问题

 

二、获取某个时间的某种格式

 

获取时间的格式,需要用到一个专门用于时间格式的类java.text.SimpleDateFormat。

首先,定义一个SimpleDateFormat变量

SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);

这个构造函数的定义如下:

SimpleDateFormat(String pattern, Locale locale)

第一个参数pattern,我们后面再解释,这里我们使用一个"",第二个参数,是用来设置时区的,这里用到了java.util.Locale这个类,这个类了面定义了很多静态变量,直接拿过来用就OK,我们把时区设置为Locale.SIMPLIFIED_CHINESE,只看名字,这个静态变量的意义已经很清楚了。

 

接下来我们使用这个SimpleDateFormat把当前时间格式化为一个如下格式的时间字符串“XXXX年XX月XX日_XX时XX分XX秒”,代码:

sdf.applyPattern("yyyy年MM月dd日_HH时mm分ss秒");

String timeStr = sdf.format(new Date());

 

获取时间格式的函数是format,这个函数的参数是java.util.Date对象,这个没有什么花头。

要说明一下的是这个pattern,所谓的模式。这里,yyyy,MM,dd等,这就是模式。

我们可以在SimpleDateFormat的构造函数中指定模式,比如

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",Locale.SIMPLIFIED_CHINESE);

也可以获取时间格式的时候使用applyPattern函数临时指定,上面的例子就是这样。

什么字符代表什么,这是j2se约定好的,设置模式的时候,我们可以使用约定好的字符加上任何我们想要的字符串。

j2se对字符所代表的模式的约定列表如下:

 

 

Letter

Date or   Time Component

Presentation

G

Era   designator

Text

y

Year

Year

M

Month in   year

Month

w

Week in   year

Number

W

Week in   month

Number

D

Day in year

Number

d

Day in   month

Number

F

Day of week   in month

Number

E

Day in week

Text

a

Am/pm marker

Text 

H

Hour in day   (0-23)

Number

k

Hour in day   (1-24)

Number

K

Hour in   am/pm (0-11) 

Number

h  

Hour in   am/pm (1-12) 

Number

m  

Minute in   hour 

Number

s  

Second in   minute 

Number

S  

Millisecond 

Number  

z  

Time   zone  

General   time zone 

Z  

Time   zone 

RFC 822   time zone 

三,设置时间

现在设置时间,推荐 使用java.util.Calendar类来进行操作,因为java.util.Date类很多方法都过时了,
Calendar 类有很多重载的设置时间的方法
我们可以针对于某一项进行设置,也可以同时进行很多设置

void

set(int field, int value) 
            将给定的日历字段设置为给定值。

 void

set(int year, int month, int date) 
            设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。

 void

set(int year, int month, int date,   int hourOfDay, int minute) 
            设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。

 void

set(int year, int month, int date,   int hourOfDay, int minute, int second) 
            设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

其中第一个就是给特定的字段设值,后面三个就是针对多个字段赋值

四,时间运算

时间的运算,无外乎就是加加减减,然后比较谁早谁晚而已,这些需求JAVA的API已经帮我们实现的很好了。一般比较时间的可以用如下的方法

abstract  void

add(int field, int amount) 
            根据日历的规则,为给定的日历字段添加或减去指定的时间量。

 boolean

after(Object when) 
            判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。

 boolean

before(Object when) 
            判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。


第一个是给某个字段加上某个数量的时间,虽然这个方法名叫add ,我们要减也是调用它的,只不过我们传入的是负数。

其实JAVA对时间操作的支持还是挺丰富的。希望大家的日常的使用中有更多的发现。

原文地址:https://www.cnblogs.com/mayhelp/p/3174754.html