Java 关于时间的类

引入:在学习System 这个类时,有一个获取当前时间毫秒值的方法 System.getTimeMillis();
关于时间的三个类:
Date 获取当前时间对象
DateFormat 时间的格式化输出 和解析
Calendar 日历类,可以获取时间的一部分值
一:Date
获取时间对象:(构造函数)

 long time = System.currentTimeMillis();
 Date date1 = new Date(time);//将毫秒值转化为时间对象
 Date date2 = new Date();//直接获取时间对象
//
System.out.println("date1 = "+date1);
System.out.println("date2 = "+date2);
//时间对象有自己的toString 函数

运行结果:
date1 = Mon Sep 17 21:24:08 CST 2018
date2 = Mon Sep 17 21:24:08 CST 2018
Date 的返回和接受值的格式:星期 月 日 小时 分 秒 时区 年
//
Date 类对时间的大部分操作的方法都已经弃用(如果想要了解,就查API),跟多的的但对时间的操方法都在 DateFormat calendar 两个类中。

二:DateFormat
用于时间的格式化(将时间对象转化为指定的文本格式)和将时间文件解析成时间对象输出

 //1.获取格式器
       // DateFormat format = DateFormat.getDateInstance();
        // 获取默认格式器  Mon Sep 17 21:35:16 CST 2018
        DateFormat format = DateFormat.getDateInstance(DateFormat.FULL);
        //获取指定格式的格式器   FULL   LONG   SHORT  
        String d = format.format(date1);//将时间对象按照指定的格式器转化为时间文本字符串
        System.out.println("date1 = "+d);

1.通过DateFormat 的静态方法获取格式器 将时间对象转化为文本格式

  • 获得日期格式器:

    getDateInstance() :默认格式器 2018年9月17日
    getDateInstance(DateFormat.FULL) :传入指定格式器(类的静态字段中定义)

  DateFormat.FULL    :2018年9月17日星期一
  DateFormat.LONG   :2018年9月17日
  DateFormat.SHORT  :2018/9/17
  • 获得日期和时间的格式器:
    getDateTimeInstance();获取默认的日期时间格式器
    getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);指定格式的日期时间格式器
//获取日期和时间的格式器
        DateFormat format1 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
        String d1 = format1.format(date1);   

运行结果:
2018年9月17日 CST 下午9:47:14

  1. 将时间文本转化为时间对象
    在解析文本是有一点要特别注意:格式器的风格要和被解析的文本一致,如果在已经定义的格式找不到相符合的格式,那么就要自定义一个格式。才能将文本解析成Date 时间类
  //将时间文本转化为时间对象   解析时间文本   2018/9/25
        String t = "2018/9/25";
        //获取格式器
        DateFormat format2 = DateFormat.getDateInstance(DateFormat.SHORT);
        Date Date = format2.parse(t);
        System.out.println("Date = "+Date);

运行结果:Date = Tue Sep 25 00:00:00 CST 2018

  • 自定义格式的解析的格式器:
    在DateFormat 的子类 SimpleDateFormat 。
    1.通过SimpleDateFormat 的构造函数明确解析格式器的风格
 DateFormat format3 = new SimpleDateFormat();//默认格式
SimpleDateFormat(String pattern) //传入定义的格式器风格
y
M
日期d
时 /分 /秒h/1-12 / m /s

要注意大小写

 //构造自定义解析文本的格式器的风格
        String  s2 = "2018--2--17  15:25:32";
        DateFormat format3 = new SimpleDateFormat("yyy--MM--dd  hh:mm:ss");//自定义风格
        Date Date1 = format3.parse(s2);//文本解析要抛出异常!!!!
        System.out.println("Date1 = "+Date1);

运行结果:Date1 = Sat Feb 17 15:25:32 CST 2018
//
三:Calendar 获取时间对象中的指定字段(如:只获取年)

//获取时间的指定字段
        Calendar c = Calendar.getInstance();//获取日历

Calendar 有自己的toString 方法,返回的是,日历的字符串形式
实际上Calendar 的内部维护的是一个Map 集合,所以是键对值 存在的,所以要获取指定的的内容,就给指定的键就可以了。
c.get(字段);

//获取时间的指定字段
        Calendar c = Calendar.getInstance();//获取日历
        int year = Calendar.YEAR;
        int month = Calendar.MONTH;
        int day = Calendar.DAY_OF_MONTH;
        String Wday = WeekDay(c.get(Calendar.DAY_OF_WEEK));

        //日历中的数字和星期的对应关系1是星期日

       System.out.println(c.get(year)+"年 "+(c.get(month)+1)+"月"+c.get(day)+"日"+Wday);
    }
    private static String WeekDay(int dayOfWeek) {//将获取的数字对应正确的星期,通过查表一一对应
        String[] week = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        return week[dayOfWeek];
    }

运行结果:2018年 9月17日星期一

//
——————————————————————————————————————————————
时间练习一:
计算2013/4/25 到 2013/7/29 一共有多少天

package AboutTime;
//关于时间的练习
//计算2013/4/25 到  2013/7/29 一共有多少天
/*思路:
* 将本转化为时间对象
* 时间对象获取毫秒值
* 毫秒值相减,将结果转化变为天
* */

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

public class Test1 {
    public static void main(String[] args) throws ParseException {
        //定义时间字符串
        String s1 = "2013/4/25";
        String s2 = "2013/4/29";
        long time =getDays(s1,s2);

        System.out.println("days = "+time);
    }

    private static long getDays(String s1, String s2) throws ParseException {
        //获得格式器
        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
        Date date1 = format.parse(s1);//要抛出异常
        Date date2= format.parse(s2);
        //获取毫秒值
        long time = Math.abs(date1.getTime()- date2.getTime());
        return time=time/1000/60/60/24;
    }
}

练习二:计算二月份一共有多少天

package AboutTime;

import java.util.Calendar;

//计算给定的年分二月份有多少天
public class Test2 {
    public  static void main(String[] args){
        int y = 2004;
        int day1 = getDays1(y);
        int day2 = getDays2(y);
        System.out.println("days = "+day1);
        System.out.println("days = "+day2);

    }

    private static int getDays2(int y) {
        //使用日Calendar 中的方法。set  可以设置日期,get 获取字段信息 ,add 可以实现日期的偏移
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR,2013);//对指定字段进行设置
        c.set(y,2,1);//同时对年月日进行设置

        //add 实现日期的便宜
        c.add(Calendar.DAY_OF_MONTH,-1);
        //为了看到日期的输出,对日历对象指定字段输出
        int year = Calendar.YEAR;
        int month = Calendar.MONTH;
        int day = Calendar.DAY_OF_MONTH;
        System.out.println(c.get(year)+"年 "+(c.get(month)+1)+"月 "+c.get(day)+"日");
        return c.get(Calendar.DAY_OF_MONTH);
    }

    //方法一:判断该年分是否为闰年
    private static int getDays1(int y) {
        if(y%4==0&&y%100!=0||y%400==0){
            return 29;
        }
        return 28;
    }
}

注意:在使用Calendar 。获取月份字段对应值,时: 月份从 0-11;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值