1、Date类简介
Date类是java.util下的一个封装时间和日期信息的类。不过Date类中用于时间分量的计算已经被Calendar类所取代。重点介绍setTime和getTime两个方法。
public void testDate(){
//创建一个date对象并打印时间
Date date = new Date();
System.out.println(date);
//date对象调用getTime()方法返回一个long值,返回从1970年1月1日到现在经历的毫秒数
long time = date.getTime();
System.out.println(time);
//增加一天所经历的毫秒数,通过调用setTime()方法可以指定日期
time += 24*60*60*1000;
date.setTime(time);
System.out.println(date);
}
输出结果如下:
getTime()可以获取当前所经历的毫秒数,setTime()可以修改当前时间。由于Date类重写了toString()方法,所以可以直接打印。
2、SimpleDateFormat简介
SimpleDateFormat是java.text下一个类,它允许进行格式转换,即允许日期–>文本和文本–>日期。
常用的构造方法如下有两个:
-SimpleDateFormat()
-SimpleDateFormat(String pattern) pattern可以指定的日期格式
pattern匹配字符如下:
比如我将Date格式转换成为自定义的格式并输出,使用format方法:
public void testSimpleDateFormat(){
//自定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd E HH:mm:ss");
Date date = new Date();
//调用format方法进行转换
String format = sdf.format(date);
System.out.println(format);
}
输出结果为:
除此之外,SimpleDateFormat也支持将字符串转换为日期格式,使用parse方法:
public void testParse(){
//指定一个日期字符串
String str = "2017-11-11";
//匹配字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
//通过parse方法将字符串转换为Date对象
Date parse = sdf.parse(str);
System.out.println(parse);
} catch (ParseException e) {
e.printStackTrace();
}
}
输出结果为:
以上就是Date类和SimpleDateFormat类的简介,下面重点来看Calendar类。
3、Calendar类简介
Calendar是java.util下的一个抽象类,用于封装日历信息,其最大的功能是可以对时间分量进行运算。
Calendar中定义了许许多多的字段,目的是为了获取或者设置一些时间分量,还有两个构造方法以及多个方法。
建立Calendar对象的方式是调用getInstance()方法,它是一个静态方法,通过类名来调用可以直接返回一个Calendar对象。
public void testCalendar(){
Calendar cal = Calendar.getInstance();
System.out.println(cal.getClass().getName());
}
输出结果如下:
前面我们提到过,Calendar是一个抽象类,它的子类只有一个,就是GregorianCalendar类,所以上面返回的类名是GregorianCalendar。
下面我们来看通过Calendar来设置日期和时间分量。
public void testCal() {
// 创建一个Calendar对象
Calendar cal = Calendar.getInstance();
// 设置年月日
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal.set(Calendar.DATE, 14);
// 打印
System.out.println(cal.getTime());
//设置一个大于31的日期天数
cal.set(Calendar.DATE, 32);
System.out.println(cal.getTime());
}
输出结果为:
阅读如上代码片段,在设置年月日中,用到的Calendar.YEAR、Calendar.MONTH、Calendar.DATE就是之前我们提到过的Calendar类中定义的字段,详细字段可以查看java api文档进一步了解。
在上面我们看到当我设置日期为32时,程序会自动识别到下一个月的对应天数,这是非常便利的。
上面介绍了设置时间分量以后,我们再来看如何获取时间分量,这里也用到了许许多多的字段。
public void testCal() {
// 创建一个Calendar对象
Calendar cal = Calendar.getInstance();
// 设置年月日
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal.set(Calendar.DATE, 14);
// 打印
System.out.println(cal.getTime());
//获取这天是星期几
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);
System.out.println(dayOfWeek);//输出2
}
通过调用cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);返回一个int型数,标识这天再该月该周是星期几,这也是DAY_OF_WEEK_IN_MONTH字段的作用。
使用add()方法可以为当前日期增加或者减去相应时间。如:
public void testCal() {
// 创建一个Calendar对象
Calendar cal = Calendar.getInstance();
// 设置年月日
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal.set(Calendar.DATE, 14);
// 打印
System.out.println(cal.getTime());
// 调用add方法,增加一年,减去三个月
cal.add(Calendar.YEAR, 1);
cal.add(Calendar.MONTH, -3);
System.out.println("年:" + cal.get(Calendar.YEAR) + "\n月:"
+ (cal.get(Calendar.MONTH) + 1)); // 由于月是从0开始,所以这里要加1
}
输出结果为:
可以看到,原来的2017年变成了2018,9月份变成了6月份。
4、介绍完上面的三个类以后,我们来看一个例子,摘自某培训机构。
在这里附上我的代码:
package com.wisdom.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Promotion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 获取生产日期
System.out.println("请输入生产日期:(yyyy-MM-dd)");
String fromDate = scanner.next();
// 获取保质期
System.out.println("请输入保质期:(天数)");
int days = scanner.nextInt();
scanner.close();
// 将字符串生产日期转变为Calendar对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date from = null;
try {
from = sdf.parse(fromDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 将date对象变为Calendar对象,方便对时间分量的操作
cal.setTime(from);
cal.add(cal.DATE, days - 14);
// 获取过期前14天是星期几,这里的星期是以星期天为第一天来算的
int i = cal.get(Calendar.DAY_OF_WEEK);
// 所以这边为3-i+1
cal.add(cal.DATE, 4 - i);
Date date = cal.getTime();
System.out.println("促销日期为:" + sdf.format(date));
}
}
输出结果如下:
本人仍在学习路上,欢迎各位读者提出宝贵意见。该回家睡觉了。。。