java 中的时间操作不外乎这四种情况:
1 、获取当前时间
2 、获取某个时间的某种格式
3 、设置时间
4 、时间的运算
好,下面就针对这四种情况,一个一个搞定。
一、获取当前时间
有两种方式可以获得,第一种,使用 Date 类。
j2SE 的包里有两个 Date 类,一个是 java.sql.Date, 一个是 java.util.Date
这里,要使用 java.util.Date 。获取当前时间的代码如下
Date date = new Date();
date.getTime() ;
还有一种方式,使用 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对时间操作的支持还是挺丰富的。希望大家的日常的使用中有更多的发现。
转自:http://www.blogjava.net/hadeslee/archive/2007/09/11/144386.html