引入:在学习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
- 将时间文本转化为时间对象
在解析文本是有一点要特别注意:格式器的风格要和被解析的文本一致,如果在已经定义的格式找不到相符合的格式,那么就要自定义一个格式。才能将文本解析成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;