日期类(Date、SimpleDateFormat、Calendar)

一、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的方式:

  1. Date类的toString()方法
  2. DateFormat类的format()方法

b)String 转换到 Date的方式:

  1. Date类的构造方法(已过时,被DateFormat类的parse(String s)方法取代)
  2. 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 + "天");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值