千里冰封
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 set(int field, int value)
          将给定的日历字段设置为给定值。
 void set(int year, int month, int date)
          设置日历字段 YEARMONTHDAY_OF_MONTH 的值。
 void set(int year, int month, int date, int hourOfDay, int minute)
          设置日历字段 YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE 的值。
 void set(int year, int month, int date, int hourOfDay, int minute, int second)
          设置字段 YEARMONTHDAY_OF_MONTHHOURMINUTESECOND 的值。
其中第一个就是给特定的字段设值,后面三个就是针对多个字段赋值

四,时间运算

时间的运算,无外乎就是加加减减,然后比较谁早谁晚而已,这些需求JAVA的API已经帮我们实现的很好了。一般比较时间的可以用如下的方法
abstract  void add(int field, int amount)
          根据日历的规则,为给定的日历字段添加或减去指定的时间量。
 boolean after(Object when)
          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
 boolean before(Object when)
          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。

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

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



尽管千里冰封
依然拥有晴空

你我共同品味JAVA的浓香.
posted on 2007-09-11 23:56 千里冰封 阅读(39702) 评论(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 | david
顶一个  回复  更多评论
  
# re: JAVA中的时间操作[未登录]
2007-09-12 09:55 | Samuel
对时间没有进行彻底的研究,这只是入门而已!  回复  更多评论
  
# 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 | Matthew Chen
听说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 | ralph
谢谢,  回复  更多评论
  
# re: JAVA中的时间操作
2012-09-03 18:37 | Strive443
好文,好画,好博客  回复  更多评论
  
# re: JAVA中的时间操作
2012-10-26 15:35 | gloot
java 的时间真蛋疼,

设计得真他妈的垃圾  回复  更多评论
  

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


网站导航: