Java中的时间处理

本文介绍了Java中处理时间的方式,包括获取系统时间、日期格式化、日期时间操作等。重点讨论了`java.util.Date`和`java.text.SimpleDateFormat`类在处理日期时的细节,如月份值从0开始的问题,以及`Calendar`类对时间的修改规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK8前,java对时间的处理使用的是java.util.Datejava.util.Calendar等。

首先我们先来获取一下系统时间

//通过Date实例来取得系统时间
		Date date = new Date();
		System.out.println(date.getTime());
		//通过currentTimeMillis()取得系统时间
		System.out.println(System.currentTimeMillis());

但是这两种方法,返回的是long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数
在这里插入图片描述
而有关日期格式的处理,则使用到了java.text.DateFormatDateFormat是个抽象类,其操作类是java.text.SimpleDateFormat

我们直接使用DateFormat的静态方法,来对日期进行格式化

static void dateInstanceDemo(Date date){
//get日期
	//\t 制表符,格式化显示数据
	//%s %n  格式控制符号,%s表示以字符串格式输出,%n表示换行符
	out.println("getDateInstance() demo");
	out.printf("\tLONG:%s%n",getDateInstance(LONG).format(date));
	out.printf("\tSHORT:%s%n",getDateInstance(SHORT).format(date));
}

通过getDateInstance()方法,对Date实例进行LONG或者SHORT的格式设置,LONG表示显示完整的日期(年月日),而SHORT显示日期缩写(yy-mm-dd)
在这里插入图片描述

有对日期进行格式化的方法,就有对时间进行格式化的方法:getTimeInseance()
getDateInstance()不同的是,getTimeInseance()有三种格式,分别是LONG、MEDIUM和SHORT

static void timeInseanceDemo(Date date){
//get时间
	out.println("getTimeInseance() demo");
	out.printf("\tLONG:%s%n",getTimeInstance(LONG).format(date));
	out.printf("\tMEDIUM:%s%n",getTimeInstance(MEDIUM).format(date));
	out.printf("\tSHORT:%s%n",getTimeInstance(SHORT).format(date));
}

在这里插入图片描述
还有一个getDateTimeInstance()方法可以将日期与时间合并显示

static void timeInstanceDemo(Date date){
	//get完整的日期时间
	out.println("getDateTimeInseance() demo");
	out.printf("\tLONG: %s%n",getDateTimeInstance(LONG,LONG).format(date));
	out.printf("\tMEDIUM: %s%n",getDateTimeInstance(SHORT,MEDIUM).format(date));
	out.printf("\tSHORT: %s%n",getDateTimeInstance(SHORT,SHORT).format(date));
}

在这里插入图片描述
除此之外,我们也可以通过get()方法并指定Calendar上的字段枚举常数来获取单独的年、月、日等。

	Calendar calendar = Calendar.getInstance();
	/*
	 * 取得Calendar实例后,可以使用getTime()获取Date实例,如果想要取得年月日等
	 * 可以使用get()方法并指定Calendar上的字段枚举常数
	 */
	System.out.println(calendar.get(Calendar.YEAR));
	System.out.println(calendar.get(Calendar.MONTH));
	System.out.println(calendar.get(Calendar.DATE));

执行代码的时候就会发现一个问题,现在当前时间是2019年4月9日,以上代码应该会依次输出“2019”“4”和“9”,可结果不是这样。
在这里插入图片描述
为什么月份会少1呢?因为在java.util.Calendar中,月份列举值的一月是从数字0开始的,所以月份的值需要特别注意:

	* public final static int JANUARY = 0;
	* public final static int FEBRUARY = 1;
	* public final static int MARCH = 2;
	* public final static int APRIL = 3; 
	* public final static int MAY = 4;
	* public final static int JUNE = 5;
	* public final static int JULY = 6;
	* public final static int AUGUST = 7;
	* public final static int SEPTEMBER = 8;
	* public final static int OCTOBER = 9;
	* public final static int NOVEMBER = 10;
	* public final static int DECEMBER = 11;

可以获取时间,当然也可以设置时间,设定时间日期等字段,不要对Date设定,应使用Calendar,同样需要注意月份

	Calendar calendar =Calendar.getInstance();
		calendar.set(1999,Calendar.NOVEMBER,28);
		System.out.println(calendar.get(Calendar.YEAR) + "-" +
				(calendar.get(Calendar.MONTH)+1) + "-" +
				calendar.get(Calendar.DATE));

需要注意的是,在设置时间的时候,月份参数若填入的是int型数据,系统将默认编译为月份列举值

在取得一个Calendar实例后,可以使用add()方法来对时间进行改变

	calendar.add(Calendar.YEAR, -1);
		calendar.add(Calendar.MONTH, +1);
		calendar.add(Calendar.DATE, -3);
		System.out.println(calendar.get(Calendar.YEAR) + "-" +
				(calendar.get(Calendar.MONTH)+1) + "-" +
				calendar.get(Calendar.DATE));

在年份上-1,月份上+1,日期上-3,最后得到的结果就是
在这里插入图片描述

也可以使用roll()方法来对日期进行加减,但是只能对某个字段进行操作。例如设置时间2019/03/31,然后对其执行calendar.roll(Calendar.DATE,1),意思是在日期(31号)上进行加1,但是时间中是没有32号的,所以最终的结果是2019/03/01,并不会对月份进行+1的改变。

Calendar calendar = Calendar.getInstance();
		calendar.set(2019,Calendar.MARCH,31);
		calendar.roll(calendar.DATE, +1);
		System.out.println(calendar.get(Calendar.YEAR) + "-" +
				(calendar.get(Calendar.MONTH)+1) + "-" +
				calendar.get(Calendar.DATE));

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值