JAVA中Date详解

Java Date类的使用总结

Date类表示特定的瞬间,精确到毫秒。

有2种方法可以创建Date对象(这里不考虑已过时的构造函数)

1、public Date()——分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

?
1
2
3
4
5
@Test
  public void test1() {
    Date date = new Date();
    System.out.println(date);
  }

Sun Oct 23 22:39:14 CST 2016

2、public Date(long date)——根据给定的毫秒值创建日期对象。

?
1
2
3
4
5
6
@Test
public void test2() {
   long time = System.currentTimeMillis();
   Date date = new Date(time);
   System.out.println(date);
}

Sun Oct 23 22:41:42 CST 2016

介绍完了Date的构造函数后,接下来来看看日期与毫秒值的相互转换

1、public long getTime()——日期转毫秒值

通过getTime方法可以将一个日期类型转换为long类型的毫秒值

?
1
2
3
4
5
@Test
  public void test3() {
    Date date = new Date();
    System.out.println(date.getTime());
  }

1477234414353

2、public void setTime(long time)——毫秒值转日期

?
1
2
3
4
5
6
7
@Test
public void test4() {
   long time = System.currentTimeMillis();
   Date date = new Date();
   date.setTime(time);
   System.out.println(date);
}

Sun Oct 23 22:53:05 CST 2016

当然也可以通过构造函数public Date(long date)将毫秒值转为日期类型。

通常我们会比较2个日期的大小,Date类提供以下方法用来比较2个日期的相关操作

1、public boolean before(Date when)——测试此日期是否在指定日期之前,当且仅当此Date对象表示的瞬间比when表示的瞬间早,才返回true;否则返回false。

?
1
2
3
4
5
6
@Test
public void test5() {
   Date date1 = new Date( 1000 );
   Date date2 = new Date( 2000 );
   System.out.println(date1.before(date2));
}

true

2、public boolean after(Date when)——测试此日期是否在指定日期之后,当且仅当此Date对象表示的瞬间比when表示的瞬间晚,才返回true;否则返回false。

?
1
2
3
4
5
6
@Test
public void test6() {
   Date date1 = new Date( 1000 );
   Date date2 = new Date( 2000 );
   System.out.println(date1.after(date2));
}

false

3、public int compareTo(Date anotherDate)——比较两个日期的顺序。

如果参数Date等于此Date,则返回值0;如果此Date在Date参数之前,则返回小于0的值;如果此Date在Date参数之后,则返回大于0的值。

?
1
2
3
4
5
6
@Test
public void test7() {
   Date date1 = new Date( 1000 );
   Date date2 = new Date( 2000 );
   System.out.println(date1.compareTo(date2));
}

-1


一、Date类型的初始化

1、 Date(int year, int month, int date); 直接写入年份是得不到正确的结果的。 因为java中Date是从1900年开始算的,所以前面的第一个参数只要填入从1900年后过了多少年就是你想要得到的年份。 月需要减1,日可以直接插入。 这种方法用的比较少,常用的是第二种方法。

2、 这种方法是将一个符合特定格式,比如yyyy-MM-dd,的字符串转化成为Date类型的数据。 首先,定义一个Date类型的对象 Date date = null; 再定义一个String类型的符合格式的字符串 String dateStr = "2010-9-10"; 把这个字符串进行拆分 String[ ]  dateDivide = dateStr.split("-"); 把年月日分别取出,赋给Calendar,用 Calendar的getTime();取得日期再赋给date。

例如:

1
2
3
4
5
6
7
8
if (dateDivide.length== 3 ){ 
    int  year = Integer.parseInt(dateDivide [ 0 ].trim()); //去掉空格 
      int  month = Integer.parseInt(dateDivide [ 1 ].trim()); 
      int  day = Integer.parseInt(dateDivide [ 2 ].trim()); 
      Calendar c = Calendar.getInstance(); //获取一个日历实例 
      c.set(year, month- 1 , day); //设定日历的日期 
      date = c.getTime(); 
}

二、Date类型的比较

Date a;
Date b;
假设现在你已经实例化了a和b
a.after(b)返回一个boolean,如果a的时间在b之后(不包括等于)返回true
b.before(a)返回一个boolean,如果b的时间在a之前(不包括等于)返回true
a.equals(b)返回一个boolean,如果a的时间和b相等返回true

三、Date类型常用的操作函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// 1.计算某一月份的最大天数
Calendar time = Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR, year);  // year 为 int
time.set(Calendar.MONTH, i -  1 ); // 注意,Calendar对象默认一月为0
int  day = time.getActualMaximum(Calendar.DAY_OF_MONTH); // 本月份的天数
// 注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
// 2.Calendar和Date的转化
// (1) Calendar转化为Date Calendar
cal = Calendar.getInstance();
Date date = cal.getTime();
// (2) Date转化为Calendar
Date date =  new  Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 3.格式化输出日期时间(这个用的比较多)
Date date =  new  Date();
SimpleDateFormat df =  new  SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" );
String time = df.format(date);
System.out.println(time);
// 4.计算一年中的第几星期
// (1)计算某一天是一年中的第几星期
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,  2006 );
cal.set(Calendar.MONTH,  8 );
cal.set(Calendar.DAY_OF_MONTH,  3 );
int  weekno = cal.get(Calendar.WEEK_OF_YEAR);
// (2)计算一年中的第几星期是几号
SimpleDateFormat df =  new  SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,  2006 );
cal.set(Calendar.WEEK_OF_YEAR,  1 );
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime())); //输出:2006-01-02
// 5.add()和roll()的用法(不太常用)
// (1)add()方法
SimpleDateFormat df=newSimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,  2006 );
cal.set(Calendar.MONTH,  8 );
cal.set(Calendar.DAY_OF_MONTH,  3 );
cal.add(Calendar.DATE, - 4 );
Date date = cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE,  4 );
date = cal.getTime();
System.out.println(df.format(date)); //输出:2006-08-30 2006-09-03
//(2)roll方法
cal.set(Calendar.YEAR,  2006 );
cal.set(Calendar.MONTH, 8 );
cal.set(Calendar.DAY_OF_MONTH, 3 );
cal.roll(Calendar.DATE, - 4 );
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4 );
date=cal.getTime();
System.out.println(df.format(date)); //输出:2006-09-292006-09-03
// 可见,roll()方法在本月内循环,一般使用add()方法;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值