千里冰封
java 浓香四溢
posts - 151,comments - 2801,trackbacks - 0

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型的东西,用户希望得到的往往是一个时间的字符串,比如“2006618号”,或“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把当前时间格式化为一个如下格式的时间字符串“xxxxxxxx_xxxxxx秒”,代码:

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)
          设置日历字段 yearmonthday_of_month 的值。
 void (int year, int month, int date, int hourofday, int minute)
          设置日历字段 yearmonthday_of_monthhour_of_dayminute 的值。
 void (int year, int month, int date, int hourofday, int minute, int second)
          设置字段 yearmonthday_of_monthhourminutesecond 的值。
其中第一个就是给特定的字段设值,后面三个就是针对多个字段赋值

四,时间运算

时间的运算,无外乎就是加加减减,然后比较谁早谁晚而已,这些需求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

feedback:
# re: java中的时间操作
2007-09-12 08:00 |
关于时间的运算,用calendar或者其子类gregoriancalendar也许更好一些。  回复  
  
# re: java中的时间操作
2007-09-12 08:38 |
获取、设置时间用date类,关于对时间的比较、计算用gregoriancaleader及其子类更方便。  回复  
  
# re: java中的时间操作[未登录]
2007-09-12 09:24 |
顶一个  回复  
  
# re: java中的时间操作[未登录]
2007-09-12 09:55 |
对时间没有进行彻底的研究,这只是入门而已!  回复  
  
# re: java中的时间操作
2007-09-12 11:54 |
在实际项目中,时区会带来很多问题  回复  
  
# re: java中的时间操作
2007-09-12 15:07 |
很好很好。。一直都在用不同的方法写时间,没次都是找来找去,找到一个能用的。但是没有一次自己总结一下,虽然上面的东西都用过,但是用的时候,还是要去找。。这个东西非常号!! 谢谢~~  回复  
  
# re: java中的时间操作
2007-09-12 19:39 | 千里冰封
@黑盒子
谢谢
有空常来坐坐:)  回复  
  
# re: java中的时间操作
2007-09-13 09:56 |
听说java中时间的操作有一些不是很精确,不清楚具体指哪一块,楼主有没有研究呢,感觉用calander会好点.  回复  
  
# re: java中的时间操作
2007-09-13 09:57 |
恩,在实际开发中还是用gregoriancalendar和calendar....
不过也时受教了...  回复  
  
# re: java中的时间操作
2007-09-13 09:59 | 千里冰封
@matthew chen
现在对时间的操作java都是推荐使用calendar的,date大部份方法都过时了,并且calendar可以处理更多的情况  回复  
  
# re: java中的时间操作
2008-12-30 13:19 |
实际开发中还是用gregoriancalendar和calendar  回复  
  
# re: java中的时间操作
2012-06-18 15:19 |
谢谢,  回复  
  
# re: java中的时间操作
2012-09-03 18:37 |
好文,好画,好博客  回复  
  
# re: java中的时间操作
2012-10-26 15:35 |
java 的时间真蛋疼,

设计得真他妈的垃圾  回复  
  

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图