一、Date类
Date类是很早就存在的类,其提供了针对日期进行操作的诸多方法,但是随着时代的发展,里面有很多方法在Java中已经过时了,但是Date还有有几个比较好的方法,下面让我们来简单介绍一下。
1.构造方法
- public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
- public Date(long date) :把一个long类型的毫秒值转换成一个日期对象
2.成员方法
- public long getTime(): 获取一个日期对象对象毫秒值(从计算机元年计算)
- public void setTime(long time): 给一个日期对象设置上指定的毫秒值 例:date.setTime(1000 * 60 * 60) ;这个代表为计算机元年增加了一个小时(计算机元年为 1970 年 1 月 1 日 00:00:00 GMT)
3.Date与long相互转换
a)Date 转换到 long 的方式:
通过Date类的getTime()方法
b)long 转换到 Date的方式:
通过Date类的构造方法
4.Date与String相互转换
a)Date 转换到 String的方式:
- Date类的toString()方法
- DateFormat类的format()方法
b)String 转换到 Date的方式:
- Date类的构造方法(已过时,被DateFormat类的parse(String s)方法取代)
- DateFormat类的parse()方法
二、SimpleDateFormat类
SimpleDateFormat: 可以把一个日期对象格式化成一个文本(字符串) , 也可以把一个日期字符串解析成一个日期对象。
1.构造方法
- public SimpleDateFormat():使用默认的模式来创建一个SimpleDateFormat对象
- public SimpleDateFormat(String pattern):使用指定的模式(规则比如yyyy:MM:dd HH:mm:ss)来创建一个SimpleDateFormat对象。
2.规则的定义
y | 年 |
---|---|
M | 月 |
d | 日 |
H | 小时 |
m | 分钟 |
s | 秒 |
3.成员方法
- public String format(Date date): 把一个日期对象格式化成一个字符串
- public Date parse(String dateStr): 把一个日期字符串解析成一个日期对象 (注意要以指定格式解析)
4.实例
需求:输入你的生日,算一下你来到这个世界多少天?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
class Demo {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个日期,格式为:2000-05-06");
String s = sc.nextLine();
Date date = new Date();
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
long birthday = sim.parse(s).getTime();
long now = date.getTime();
System.out.println("该日期距离今天"+(now-birthday)/1000/60/60/24+"天");
}
}
过程就是先把自己的生日解析成一个日期对象,然后再把该日期对象转换为毫秒,然后再获取当前时间的毫秒值,两个值做差,再按照进制转换为天数即可。
三、Calendar类
Calendar 类是一个抽象类,不能直接new对象,可以通过他的一个静态成员方法getInstance()来获取他的对象,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
1.成员方法
- public static Calendar getInstance() :使用默认时区和语言环境获得一个日历对象
- public int get(int field): 获得给定日历字段对应的值 field通过Calendar提供的字段来拿
- public void add(int field,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量
- public final void set(int year,int month,int date): 设置日历时间 年月日
2.Calendar提供的字段
- int year = c.get(Calendar.YEAR); //获取年
- int month = c.get(Calendar.MONTH) ; //获取月份(0表示1月份)
- int day = c.get(Calendar.DAY_OF_MONTH); //获取当前天数
- int first = c.getActualMinimum(c.DAY_OF_MONTH); //获取本月最小天数
- int last = c.getActualMaximum(c.DAY_OF_MONTH); //获取本月最大天数
- int time = c.get(Calendar.HOUR_OF_DAY); //获取当前小时
- int min = c.get(Calendar.MINUTE); //获取当前分钟
- int xx = c.get(Calendar.SECOND); //获取当前秒
四、拓展
JDK1.8 之后,提供了一套全新的时间日期API 也推荐你使用JDK1.8所提供的,(你来到这个世界多少天案例)
import java.time.LocalDate;
import java.time.Period;
public class MyTest {
public static void main(String[] args) {
LocalDate start = LocalDate.of(1998, 5, 13);
LocalDate now = LocalDate.now();
//算出两个日期的间隔
Period between = Period.between(start, now);
int years = between.getYears();
int months = between.getMonths();
int days = between.getDays();
System.out.println("你现在" + years + "岁 零" + months + "月 零" + days + "天");
}
}