1. java.util.Date: Date的每一个实例用于表示一个确切的时间点。内部维护了一个long值,该值纪录的是从:1970年1月1日00:00:00到表示的时间点所经历的毫秒值。正数是70年以后的日期,负数则是70年以前的日期.由于Date设计上存在缺陷(时区,千年虫),所以他的大部分方法被设置为“过时的”,不再建议使用
/*
* 使用默认构造方法创建的Date表示当前系统时间
*/
Date now=new Date();
/*
* Date重写了toString,返回的字符串显示的就是当前Date表示的时间。格式:
* Mon Apr 06 11:11:29 CST 2020
* 对于非英语地区不够友好
*/
System.out.println(now);
/*
* Date的大部分方法不建议使用了
*/
now.getYear();
/*
* 获取Date内部维护的long值
*/
long time=now.getTime();
System.out.println(time);
//明天这一刻的毫秒值
time+=1000*60*60*24;
/*
* void setTime(long)
* 设置一个long值,使Date表示该long值所表示的时间
*/
now.setTime(time);
System.out.println(now);
2. java.text.SimpleDateFormat: 根据一个给定的日期格式将String与Date相互转换.
//当前系统时间
Date now=new Date();
System.out.println(now);//Sun Apr 05 11:31:55 CST 2020
/*
* 2020-04-05 10:14:55
* yyyy-MM-dd HH:mm:ss
*/
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/*
* Date -> String Date转化成字符串
* String format(Date date)
* format方法可以将给定的date对象所表示的时间按照SimpleDateFormat指定的日期格式转换为字符串
*/
String str=sdf.format(now);
System.out.println(str);//2020-04-05 11:31:55
/*
* 练习:查看当前系统时间和16天5小时23分40秒以后的日期
* 显示的格式:2020年04月05日 11:31:55
*/
Date date=new Date();
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(sdf1.format(date));
long time=date.getTime();
time+=1000*60*60*24*16;//16天
time+=1000*60*60*5;//5小时
time+=1000*60*23;//23分
time+=1000*40;//40秒
date.setTime(time);
System.out.println(sdf1.format(date));
3. Date parse(String str): 从字符串转换为Date,将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个Date对象.
public static void main(String[] args) throws ParseException {
String str="2008-08-08 20:08:08";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String -> Date 从字符串转换为Date
Date date=sdf.parse(str);
System.out.println(date);//Fri Aug 08 20:08:08 CST 2008
/*
* 练习:要求用户输入自己的生日,格式为:1992-07-13
* 经过计算,输出:到今天为止一共活了XXXX天
* 以及距离10000天还有多少天,生存10000天的纪念日是2018-12-05
*/
System.out.println("输入您的是生日:");
Scanner scanner=new Scanner(System.in);
String birStr=scanner.nextLine();//获取用户输入的生日值
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date birth=sdf1.parse(birStr);
//计算已经活了多少天
Date now=new Date();
long time=now.getTime()-birth.getTime();
time=time/1000/60/60/24;
System.out.println("恭喜你!到今天为止已经活了"+time+"天,请继续保持");
time=10000-time;
System.out.println("距离10000天,还有"+time+"天!");
time=time*1000*60*60*24;
now.setTime(now.getTime()+time);
System.out.println("生存10000天的纪念日为:"+sdf1.format(now));
}
4. java.util.Calendar 日历类: 该类是一个抽象类,封装了对时间的相关操作。 常用的实现类是格利高里日历(阳历),使用日历类是为了对时间进行相关的操作,比如计算时间.
public static void main(String[] args) {
/*
* 使用Calendar的静态方法创建实例,
* 该方法会根据当前系统所在地区创建一个相应的实现,通常是GregorianCalendar
* 默认创建的日历实例表示当前系统时间
*/
Calendar calendar=Calendar.getInstance();
/*
* toString不能直观反映表示的日期
*/
System.out.println(calendar);
/*
* Calendar与Date之间的转换
* Calendar->Date
* Date getTime()
* Calendar提供了方法getTime(),
* 该方法返回一个Date对象,该对象表示的时间就是当前Calendar表示的时间
*/
Date date=calendar.getTime();
System.out.println(date);
//表示明天这一时刻
date.setTime(date.getTime()+1000*60*60*24);
System.out.println(date);
/*
* Date -> Calendar
* void setTime(Date date)
* Calendar的setTime方法可以使当前Calendar表示给定的Date所表示的时间
*/
//Calendar也表示明天这一时刻
calendar.setTime(date);
}
5. void set(int field,int value): Calendar提供了针对不同时间分量单独设置值的方法,其中第一个参数为:时间分量,例如:年、月、日等等。第二个参数为对应的值. 时间分量是一个int值,使用Calendar提供的常量
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime());
/*
* 设置Calendar,使其表示2008-08-08 20:08:08
*/
calendar.set(Calendar.YEAR, 2008);//设定年
System.out.println(calendar.getTime());
calendar.set(Calendar.MONTH, 7);//设定月,月从0开始,0表示1月;或者可以使用具体月的常量
//calendar.set(Calendar.MONTH, Calendar.AUGUST);设定月,可以使用具体月的常量
System.out.println(calendar.getTime());
/*
* 设定日,对应的时间分量常用的
* DATE:月中天
* DAY_OF_MONTH:月中的天,与DATE一致
* DAY_OF_WEEK:周中的天,星期几
* DAY_OF_YEAR:年中的天
*/
calendar.set(Calendar.DAY_OF_MONTH, 8);//设定日
System.out.println(calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, 20);//设定时
System.out.println(calendar.getTime());
calendar.set(Calendar.MINUTE, 8);//设定分
System.out.println(calendar.getTime());
calendar.set(Calendar.SECOND, 8);//设定秒
System.out.println(calendar.getTime());
6. 获取一个Calendar表示的日期中各个时间分量对应的值
Calendar calendar=Calendar.getInstance();
/* int get(int field)
* 获取对应时间分量的值
*/
int year=calendar.get(Calendar.YEAR);//获取年
int month=calendar.get(Calendar.MONTH)+1;//获取月
int day=calendar.get(Calendar.DATE);//获取日
System.out.print(year+"-"+month+"-"+day+" ");
int hour=calendar.get(Calendar.HOUR);
int minute=calendar.get(Calendar.MINUTE);
int second=calendar.get(Calendar.SECOND);
System.out.print(hour+":"+minute+":"+second+" ");
//查看星期几 dow=day of week
int dow=calendar.get(Calendar.DAY_OF_WEEK);
String[] date={"日","一","二","三","四","五","六"};
System.out.println("周"+date[dow-1]);
//到今天为止,今年已经过了多少天 doy=day of year
int doy=calendar.get(Calendar.DAY_OF_YEAR);
System.out.println(year+"已经过了"+doy+"天");
7. 获取某一个时间分量所允许的最大值
Calendar calendar=Calendar.getInstance();
//当月总共多少天
int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(days);
//查看2016年2月多少天、
calendar.set(Calendar.MONTH,1);//月份从0开始
days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(days);
//今年总共多少天
days=calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println("今年一共"+days+"天");
8. void add(int field,int value): Calendar中计算时间的方法,对给定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值.
/*
* 查看3年2个月零一天以后的日期
*/
Calendar calendar=Calendar.getInstance();
//查看三年后
calendar.add(Calendar.YEAR, 3);
System.out.println(calendar.getTime());
//查看2个月后
calendar.add(Calendar.MONTH, 2);
System.out.println(calendar.getTime());
//查看8天以后
calendar.add(Calendar.DAY_OF_YEAR, 8);
System.out.println(calendar.getTime());
//查看5小时以前
calendar.add(Calendar.HOUR_OF_DAY, -5);
System.out.println(calendar.getTime());
/*
* 当遇到类似开发要求:
* 要求用户输入一个日期,然后对该日期进行一系列的运算,再将计算后的日期显示给用户时。流程如下:
* 1.获取用户输入的日期字符串
* 2.使用SimpleDateFormat将其转换为Date
* 3.创建一个Calendar,使其表示Date表示的日期
* 4.使用Calendar根据需求计算时间
* 5.将Calendar转换为一个Date
* 6.使用SimpleDateFormat将Date转化为字符串后显示给用户
*/