Java8的日期、时间类

Date类

Java提供Date类来处理日期、时间,Date类提供六个构造器,4个已经过时了,不推荐使用。
两个常用构造器

  • Date():生成一个代表当前日期时间的Date对象。该构造器在底层调用System.currentTimeMillis(),获取long整数作为日期参数。
  • Date(long date):根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT1970年1月1日00:00:00之间的时间差,用毫秒作为计时单位。

几个常用方法

  • boolean after(Date when):测试该日期是否在指定日期when之后
  • boolean before(Date when):测试该日期是否在指定日期when之前
  • long getTime():返回该时间对应的long型整数,即GMT1970-01-01 00:00:00 到该Date对象之间的时间差
  • void setTime(long time): 设置该Date对象的时间。
public class DateTest {
	public static void main(String[] args) {
		Date d1 =new Date(100);
		System.out.println(d1);
		Date d2 =new Date(System.currentTimeMillis()+100);
		System.out.println(d2);
		System.out.println(d1.compareTo(d2)); //比较d1和d2的大小
		System.out.println(d1.before(d2));
	}

}

Calendar类

Calendar(日历)是一个抽象类,不能直接使用构造器来创建Calendar对象。但它提供了几个静态getInstance()方法获取Calendar对象,这些方法根据TimeZone、Locale来获取特定的Calendar

calendar对象创建

public class Test {
	public static void main(String[] args) {
		Calendar calendar = Calendar.getInstance(); //创建一个默认的Calendar对象	
		Date date = calendar.getTime(); //从Calendar对象中取出Date对象
		Calendar calendar2 = Calendar.getInstance();
		calendar2.setTime(date);//把date数据写入calendar2中
	}

}

Calendar常用方法

  • void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • int get(int field):返回指定日历字段的值。(字段就是月或日等)
  • int getActualMaximum( int field):返回指定日历字段可能拥有的最大值。例如月,最大值11
  • void roll(int field, int amount):与add()相似,区别在于加上数量之后如超过该字段所能表示的最大范围时,也不会向上一个字段进位。
  • void set(int field,int value):将给定的日历字段设置给定值。
  • void set(int year,int month, int date,int hourOfDay,int minute,int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。
import java.util.Calendar;
import static java.util.Calendar.YEAR; //静态导入类变量
import static java.util.Calendar.MONTH;
import static java.util.Calendar.DATE;

public class CalendarTest {

	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		System.out.println(c.get(YEAR));
		System.out.println(c.get(MONTH));
		System.out.println(c.get(DATE));
		c.set(2003, 10, 23, 12, 32,23);
		System.out.println(c.getTime());
		c.roll(MONTH, -8);
		System.out.println(c.getTime());
	}

}

add与roll的区别

  • and功能强大,主要用于改变Calendar的特定字段的值,主要有两个特点。
    1.当被修改字段超出它允许的范围时,会发生进位,即上一级字段也会增大:
Calendar call = Calendar.getInstance();
	call.set(2003, 7, 23, 0, 0, 0);
	System.out.println(call.getTime());
	//输入:Sat Aug 23 00:00:00 CST 2003
	call.add(MONTH,6);
	System.out.println(call.getTime());
	//输出:Mon Feb 23 00:00:00 CST 2004

2.如果下一级也需要改变,那么该字段会修改到变化最小的值

Calendar call2 = Calendar.getInstance();
	call2.set(2003, 7, 31, 0, 0, 0);
	System.out.println(call2.getTime());
	//输出为:Sun Aug 31 00:00:00 CST 2003
	call2.add(MONTH,6);
	System.out.println(call2.getTime());
	//输出为:Sun Feb 29 00:00:00 CST 2004

Calendar 的容错性
当运用set()输入值时,参数不合法时

public class LenientTest {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		cal.set(MONTH, 13);
		System.out.println(cal.getTime());
		cal.setLenient(false); //关闭容错性
		cal.set(MONTH, 13);
		System.out.println(cal.getTime()); //报错
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值