一、 Date类
创建一个当前时间的Date对象
//创建一个代表系统当前日期的Date对象
Date d = new Date();
创建一个我们指定的时间的Date对象
使用带参数的构造方法Date(int year, int month, int day) ,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。
//创建一个代表2020年02月17号的 Date对象
Date d1 = new Date(2020-1900, 2-1, 17); (注意参数的设置)
正确获得一个date对象所包含的信息,如:
Date d2 = new Date(2020-1900, 2-1, 17);
//获得年份(注意年份要加上1900,这样才是日期对象d2所代表的年份)
int year = d2.getYear() + 1900;
//获得月份(注意月份要加1,这样才是日期对象d2所代表的月份)
int month = d2.getMonth() + 1;
//获得日期
int date = d2.getDate();
//获得小时
int hour = d2.getHours();//不设置默认为0
//获得分钟
int minute = d2.getMinutes();
//获得秒
int second = d2.getSeconds();
//获得星期 (注意:0代表星期日、1代表星期1、2代表星期2,其他的一次类推了)
int day = d2.getDay();
/**
* Date对象和相对时间之间的互转
*/
Date d3 = new Date(2020-1900,2-1,18);
long time = 1290876532190L;
//将Date类的对象转换为相对时间
long t = d3.getTime();
//将相对时间转换为Date类的对象
Date d4 = new Date(time);
二、DateFormat类和SimpleDateFormat类
DateFormat类
此类是一个日期的格式化类,用来格式化日期。具体日期可以通过java.util.Date类来获取。DateFormat类的定义:此类是定义在java.test包中的。
/**
* 美式日期格式化
*/
DateFormat df1 = null ; // 声明一个DateFormat
DateFormat df2 = null ; // 声明一个DateFormat
df1 = DateFormat.getDateInstance() ; // 得到日期的DateFormat对象
df2 = DateFormat.getDateTimeInstance() ; // 得到日期时间的DateFormat对象
System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化
System.out.println("DATETIME:" + df2.format(new Date())) ; // 按照日期时间格式化
/**
* 中式日期格式(通过Locale对象指定要显示的区域,指定的区域是中国)
*/
DateFormat df1 = null ; // 声明一个DateFormat
DateFormat df2 = null ; // 声明一个DateFormat
df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh","CN")) ; // 得到日期的DateFormat对象
df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN")) ; // 得到日期时间的DateFormat对象
System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化
System.out.println("DATETIME:" + df2.format(new Date())) ; // 按照日期时间格式化
SimpleDateFormat类
SimpleDateFormat类为DateFormat类的子类。
/**
* Date转化成指定的日期格式
*/
Date now = new Date();
SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(myFmt.format(now));//结果:2020年02月18日 17时24分27秒
SimpleDateFormat myFmt1 = new SimpleDateFormat("yy/MM/dd HH:mm");
System.out.println(myFmt1.format(now));//结果:20/02/18 17:24
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()
System.out.println(myFmt2.format(now));//结果:2020-02-18 17:24:27
SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
System.out.println(myFmt3.format(now));//结果:2020年02月18日 17时24分27秒 星期二
SimpleDateFormat myFmt4 = new SimpleDateFormat("一年中的第 D 天 一年中第 w 个星期 一月中第 W 个星期 在一天中 k 时 z 时区");
System.out.println(myFmt4.format(now));//结果:一年中的第 49 天 一年中第7个星期 一月中第3个星期 在一天中17时 CST时区
System.out.println(now.toGMTString());//结果:18 Feb 2020 09:24:27 GMT
System.out.println(now.toLocaleString());//结果:2020-02-18 17:24:27
System.out.println(now.toString());//结果:Thu Feb 18 17:24:27 CST 2020
/**
* 把给定的字符串中的日期提取为Date
* 通常是一个日期字符串,但不是想要的格式,可以先转化为Date,再转化为其它格式
*/
String strDate = "2020-02-18 10:11:30.345" ;
// 从字符串中提取出日期数字
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ;
// 将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
Date d = null ;
try{
d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
}catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace() ; // 打印异常信息
}
System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
三、Calendar类
Calendar类对象的创建
Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2020年2月18日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2020, 2 - 1, 18);//调用:public final void set(int year,int month,int date)
Calendar类对象信息的设置与获得
1)Calendar类对象信息的设置
/**
*A、Set设置
*如:
*Calendar c1 = Calendar.getInstance();
*调用:public final void set(int year,int month,int date)
*/
c1.set(2014, 6- 1, 9);//把Calendar对象c1的年月日分别设这为:2014、6、9
/**
*B、利用字段类型设置
* 如果只设定某个字段,例如日期的值,则可以使用public void set(int field,int value)
*/
//把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
//把c1对象代表的年份设置为2014年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2015);
其他字段属性set的意义以此类推
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段意义相同
Calendar.HOUR——12小时制的小时
Calendar.HOUR_OF_DAY——24小时制的小时
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几
/**
*C、Add设置(可用与计算时间)
*/
Calendar c1 = Calendar.getInstance();
//把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
//把c1对象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
2)、基本用法,获取年月日时分秒星期
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
int month = c1.get(Calendar.MONTH) + 1;(MONTH+1)
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
四、 GregorianCalendar类
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
GregorianCalendar类对象的创建
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
创建一个代表当前日期的GregorianCalendar对象
GregorianCalendar gc = new GregorianCalendar();
//创建一个代表2020年2月18日的GregorianCalendar对象(注意参数设置,与其父类是一样,月份要减去1)
GregorianCalendar gc = new GregorianCalendar(2020,2-1,18);
另外:GregorianCalendar有一个方法:boolean isLeapYear(int year)
判断给定的年份是否为闰年
五、日期类对象之间的互转
Date类对象与long型时间的互转
//1.将Date类的对象转换为long型时间
Date d= new Date();
//使用对象的getTime()方法完成
long dLong = d.getTime();
//2.将long型时间转换为Date类的对象
long time = 1290876532190L;
//使用Date的构造方法完成
Date d2 = new Date(time);
Calendar对象和long型时间之间的互转
// 将Calendar对象转换为相对时间
Calendar c = Calendar.getInstance();
long t1 = c.getTimeInMillis();
// 将long转换为Calendar对象
Calendar c1 = Calendar.getInstance();
long t = 1252785271098L;
c1.setTimeInMillis(t1);
Calendar对象和Date对象之间的互转
//1 .将Calendar对象转换为Date(c.getTime())
Calendar c = Calendar.getInstance();
Date d = c.getTime();
// 2.将Date转换为Calendar对象(s.setTime(date))
Calendar c1 = Calendar.getInstance();
Date d1 = new Date();
//通过setTime()方法后,日历c1所表示的日期就d1的日期
c1.setTime(d1);
String Calendar之间的转换:
//1.Date 转化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
//2.String 转化Date
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date birthday = sdf.parse(str);
Date个Calendar对象之间的转换
//1.Date 转化为Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
//2.Calenda转换为Date
Calendar calendar = Calendar.getInstance();
Date date =calendar.getTime();
Date和String对象之间的转换
//1.Calendar 转化 String
Calendar calendat = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;
String dateStr = sdf.format(calendar.getTime());
//2.String 转化Calendar
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
六、时间类常用方法:
判断是否是闰年
/**
* 给定一个年份判断该年份是否为闰年
*/
public static boolean isLeapYear(int year) {
GregorianCalendar calendar = new GregorianCalendar();
return calendar.isLeapYear(year);
}
获取当前日期的字符串表示形式
/**
* 利用SimpleDateFormat获取当前日期的字符串表示形式 格式:2009-5-05
*/
public static String getCurrentDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd")
return dateFormat.format(System.currentTimeMillis());
}
给出任意一个年月日得到该天是星期几
/**
* 给出任意一个年月日得到该天是星期几
*/
public static int getWeek(String date) {
// 注意参数的大小写格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
try {
Date d = dateFormat.parse(date);
c.setTime(d);
} catch (ParseException e) {
}
return c.get(Calendar.DAY_OF_WEEK)-1;
}
获得今天n天以后或者n天以前是那一天
/**
* 获得距离今天n天的那一天的日期
*/
public static String getDistanceDay(int day) {
Calendar calen = Calendar.getInstance();
calen.add(Calendar.DAY_OF_MONTH, day);
Date date = calen.getTime();
// 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(date);
}
获得距离指定日期n天的那一天的日期
/**
* 获得距离指定日期n天的那一天的日期
*/
public static String getDistanceDay(String date, int day) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date d;
Calendar c =Calendar.getInstance();
try {
d = dateFormat.parse(date);
c.setTime(d);
c.add(Calendar.DATE, day);
} catch (ParseException e) {
e.printStackTrace();
}
return dateFormat.format(c.getTime());
}
获得给定两个日期相差的天数
/**
* 获得给定两个日期相差的天数
*/
public static long getGapDays(String date1, String date2) {
String[] d1 = date1.split("-");
String[] d2 = date2.split("-");
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer.parseInt(d1[2]), 0, 0, 0);
long l1 = c.getTimeInMillis();
c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer.parseInt(d2[2]), 0, 0, 0);
long l2 = c.getTimeInMillis();
return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));
}
七、Java常用类系列(一): 包装类(Byte、Boolean、Short、Character、Integer、Long、Float、Double)
八、Java常用类系列(三): 文件类(File)