Java时间操作
一、java.util.Date
Date的每一个实例用于表示一个确切的时间点,由于Date设计存在缺陷,所以在JDK1.1以后大部分方法,就被声明为过时的,不再建议使用。现在使用Date仅用来表示时间,时间相关的操作全部使用Calendar来代替。
//默认是系统的当前时间
Date date = new Date();
//输出结果:Tue Jul 17 07:59:05 CST 2018
System.out.println(date);
//获取date日期的年份,Date大部分方法都是过时的,开发时不要使用
//已过时
int year = date.getYear();
System.out.println(year);
//获得1970 年 1 月 1 日 00:00:00 GMT 以后到date时间中间差的毫秒数
long time = date.getTime();
System.out.println(time);
二、java.util.Calendar
日历类,定义了操作时间的相关方法
Date大部分方法声明为过时的而代替方案就是使用Calendar
Calendar本身是抽象类,规定了操作时间的方法定义
常用实现类GregorianCalendar,即:阳历立法
Calendar提供了一个静态方法getInstance来根据
当前系统所在地区返回一个适用的实现类,大部分地区返回的都是阳历实现类
1.基本使用
//默认创建出来表示当前系统时间
Calendar calendar = new GregorianCalendar();
/*
* Date getTime()
* 获取一个Date该对象就表示当前calendar所表示的日期
*/
Date date = calendar.getTime();
//Wed Jul 18 07:02:05 CST 2018
System.out.println(date);
/*
* void setTime(Date date)
* 使当前Calendar表示给定的Date所表示的日期
*/
calendar.setTime(date);
2.获取指定时间分量
Calendar calendar = Calendar.getInstance();
//获取现在是哪一年
int year = calendar.get(Calendar.YEAR);
//获取现在是哪一月(从0开始)
int month = calendar.get(Calendar.MONTH)+1;
//获取现在是哪一天
int day = calendar.get(Calendar.DATE);
//获取当前小时数
int hour = calendar.get(Calendar.HOUR_OF_DAY);
//获取当前分钟数
int minute = calendar.get(Calendar.MINUTE);
//获取当前秒数
int second = calendar.get(Calendar.SECOND);
//获取今天是今年的第几天
int doy = calendar.get(Calendar.DAY_OF_YEAR);
//获取今天是星期几
String[] data = {"日", "一", "二", "三", "四", "五", "六"};
int dow = calendar.get(Calendar.DAY_OF_WEEK)-1;
String week = data[dow];
/*
* int getActualMaximum(int feild)
* 获取指定时间分量所允许的最大值,参考时间的当前calendar所表示的日期
*/
//calendar日期所在月共有多少天
int day_of_month_max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//calendar日期所在年共有多少天
int day_of_year_max = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
3.设置指定时间分量
Calendar calendar = Calendar.getInstance();
//设置年
calendar.set(Calendar.YEAR, 2019);
//设置月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
//设置天
calendar.set(Calendar.DAY_OF_MONTH, 18);
//设置时
calendar.set(Calendar.HOUR_OF_DAY, 7);
//设置分
calendar.set(Calendar.MINUTE, 18);
//设置秒
calendar.set(Calendar.SECOND, 0);
4.对指定时间分量加或减去给定的值
/*
* void add(int field, int value)
* 对指定时间分量加给定值,若传入的值为负数,则是送去给定的值
*/
Calendar calendar = Calendar.getInstance();
//加1年
calendar.add(Calendar.YEAR, 1);
//加2个月
calendar.add(Calendar.MONTH, 2);
//减3天
calendar.add(Calendar.DAY_OF_YEAR, -3);
三、java.text.SimpleDateFormat
可以按照一个给定的日期格式在Date与String之间相互转换
1.Date转String
Date date = new Date();
/*
2018-07-18 6:36:00
yyyy-MM-dd HH:mm:ss
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 将当前时间按照yyyy-MM-dd HH:mm:ss格式化成字符串
String date_format = sdf.format(date);
// 2018-07-18 06:38:23
System.out.println(date_format);
2.String转Date
String str_time = "2018-07-18 06:38:23";
/*
2018-07-18 6:36:00
yyyy-MM-dd HH:mm:ss
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//按照sdf指定的日期格式将给定字符串解析为Date对象
Date date = sdf.parse(str_time);
//Wed Jul 18 06:38:23 CST 2018
System.out.println(date);