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 |
(int field, int value)
将给定的日历字段设置为给定值。 |
void |
(int year, int month, int date)
设置日历字段 year 、month 和 day_of_month 的值。 |
void |
(int year, int month, int date, int hourofday, int minute)
设置日历字段 year 、month 、day_of_month 、hour_of_day 和 minute 的值。 |
void |
(int year, int month, int date, int hourofday, int minute, int second)
设置字段 year 、month 、day_of_month 、hour 、minute 和 second 的值。 |
其中第一个就是给特定的字段设值,后面三个就是针对多个字段赋值
四,时间运算
时间的运算,无外乎就是加加减减,然后比较谁早谁晚而已,这些需求java的api已经帮我们实现的很好了。一般比较时间的可以用如下的方法
abstract void |
(int field, int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
boolean |
( when)
判断此 calendar 表示的时间是否在指定 object 表示的时间之后,返回判断结果。 |
boolean |
( when)
判断此 calendar 表示的时间是否在指定 object 表示的时间之前,返回判断结果。 |
第一个是给某个字段加上某个数量的时间,虽然这个方法名叫add ,我们要减也是调用它的,只不过我们传入的是负数。
其实java对时间操作的支持还是挺丰富的。希望大家的日常的使用中有更多的发现。
尽管千里冰封
依然拥有晴空
你我共同品味java的浓香.
posted on 2007-09-11 23:56
千里冰封 阅读(39598)
评论(14) 所属分类:
javase