Java日期时间处理的简要使用方法

 Java中与日期时间相关的类有主要有java.util.Date(日期)、java.util.Calendar(日历)、和java.text.DateFormat(日期格式)等。其中Date是具体的类,Calendar和DateFormat是抽象类,Calendar还有一个具体的子类GregorianCalendar,DateFormat也有一个具体的子类SimpleDateFormat。

1.Date

Date可以这样用

Date date = new Date();

System.out.println(date);

这样就可以得到系统的当前时间,输出为当前的日期和时间,以及所在的时区,如我在写文章时得到的时间为 "Tue Aug 21 22:34:45 CST 2007" 。

但是Date类存储的并不是一个时间日期的格式,而是一个long型的数字,表示的是一个毫秒值,是从 "1970-01-01 00:00:00" 开始到存储日期的差值,long是带符号长整型数,所以也可以表示之前的日期。而它的表示范围自然应该是 "9223372036854775807L" 这样可以表示 290,000,000 年的时间,一般情况下是足够用了。

如果采用这样的方式

Date date = new Date();

System.out.println(date.getTime());

则可以输出这个毫秒值,如果刚才的例子中,我的时间就变成了 "1187706885718"。

知道了这个存储原理,我们就可以在这个基础上进行日期和时间的计算了,比如在刚才的基础上,我们可以得到明天的值

Date date = new Date();

long myTime = date.getTime()/1000 + 60*60*24;

date.setTime(myTime * 1000);

System.out.println(myTime);

其它的计算类似,可以参照以上例子运算。

2.DataFormat

DataFormat是一个抽象类,用于对时间日期的格式化处理,其子类SimpleDateFormat是其具体实现,使用非常简单

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date date = new Date();

String dateStr = sdf.format(date);

System.out.println(dateString);

输出结果为2007-08-21 22:34:45

在创建SimpleDateFormat的实例时传入了一个字符串参数,这个参数即所需要的格式,用不同的字母表示不同的字段,字母的个数表示其位数,字母表示的含义如下

y: 表示年,一般用四位或两位,即yy或yyyy

M: 表示月

d: 表示日

E: 表示周几,星期几

H或h: 表示小时,HH表示24小时制,hh表示12小时制

m: 表示分

s: 表示秒

当然,也可以通过格式化的时间串来创建Date对象,使用parse()方法即可

SimpleDateFormat sdf = new SimpleDateFormt("yyyy-MM-dd hh:mm:ss");

String dateStr = "2007-08-08 08:08:08";

Date date = sdf.parse(dateStr);

System.out.println(date);

即可输出设置好的日期

在DateFormat中内置了一些常量来表示常用的日期格式

DateFormat.SHORT

DateFormat.MEDIUM

DateFormat.LONG

DateFormat.FULL

使用方法如下

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

这里有两个参数,第一个是日期格式,第二个是时间格式,也可以分别设置,如下

DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);

DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL);

3.Calendar

Calendar也是一个抽象类,表示日历。日历有很多表示方法如公历,农历等,可以通过扩展该类实现各种历法的的表示,Java中内置实现了公历的表示,即GregorianCalendar类,它是Calendar的子类,是基于公历的实现

使用也很简单

GregorianCalendar gCanlendar = new GregorianCalendar();

输出可以用getTime()方法,返回一个Date对象

System.out.println(gCalendar.getTime);

同样也可以使用setTime()方法传入一个Date对象

gCalendar.setTime(new Date());

gCalendar还有几个常用方法和注意的地方

set()方法可以用分字段的形式传入参数,以得到一个需要的时间

gCalendar.set(2007, 7, 22, 0, 0, 0);

其中的参数分别代表年月日时分秒,为int型,要注意的是月份从0开始,而不是1,而且为了性能考虑,set方法使用延缓计算的方法,不会立刻刷新时间,而get()方法和下面的add()方法会即时刷新

add()方法非常强大,用于对时间的计算,可以根据不同的字段来进行计算,如将日期设置到明天

GregorianCalendar gc = new GregorianCalendar();

System.out.println(gc.getTime());

gc.add(Calendar.DATE, 1);

System.out.println(gc.getTime());

add()方法有两个参数,其中第一个是字段,第二个是值,这个值是增加的,如果要减少的话,可以传入负值

add()方法在修改时如果修改的值大于该字段的范围,则会修改相邻的较大字段的值,但是如果比它小的字段值不可变,则会将小的字段的值做最小的修改,如

Calendar calendar = Calendar.getInstance();

calendar.set(2007, 7, 31, 0, 0, 0); // 2007-8-31

calendar.add(Calendar.MONTH, 1); // 2007-9-31 => 2007-10-1

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

System.out.println(sdf.format(calendar.getTime()));

应该显示2007-10-1,但实际显示的是2007-9-30

此外还有roll()方法,也可以实现日期的计算,与add方法的区别是它不会修改比它大的字段的值,如

Calendar calendar = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

calendar.set(2007, 7, 4, 0, 0, 0); // 2007-8-4, 周日

System.out.println(sdf.format(calendar.getTime()));

calendar.roll(Calendar.WEEK_OF_MONTH, -1); // 2007-8-31, 周二

System.out.println(sdf.format(calendar.getTime()));

calendar.set(2007, 7, 4, 0, 0, 0); // 2007-8-4, 周日

System.out.println(sdf.format(calendar.getTime()));

calendar.add(Calendar.WEEK_OF_MONTH, -1); // 2007-7-28, 周日

System.out.println(sdf.format(calendar.getTime()));

输出结果为

2007-08-04

2007-08-31

2007-08-04

2007-07-28

因为WEEK_OF_MONTH比MONTH小,所以roll()方法不能修改MONTH字段的值,而add()方法可以

关于Calendar还有一些需要注意的地方,以后随时增加

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值