版权声明:来自等待or进取的博客 https://blog.csdn.net/qq_39466683/article/details/82490700
目录
Date
- 固定的时间点叫纪元,是UTC时间1970年1月1日 00:00:00。
- UTC(世界调整时间)与GMT(格林威治时间)一样,是一种具有实际目的的科学标准时间。
- 多数方法已过时,不建议使用。
- Date重写了了toString方法,用一个字符串来描述当前Date对象所表示的时间:
Sat Sep 08 08:38:12 CST 2018
SimpleDateFormat
- 是一个与语言有关的方式来格式化和解析日期的具体类。允许进行格式化(日期->文本)、解析(文本->日期)和规范化。
- 日期模式匹配字符:
- 日期和时间模式:
- java.text.SimpleDateFormat
- 构造方法:
·SimpleDateFormat():
用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。注:此构造方法可能不支持所有语言环境。要覆盖所有地区,请使用 DateFormat 类中的工厂方法。
· SimpleDateFormat(String pattern):
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。注:此构造方法可能不支持所有语言环境。要覆盖所有语言环境,请使用 DateFormat 类中的工厂方法。 - 方法:
·format(Date date):Date date = new Date();//获取当前的时间点 Fri Sep 07 10:30:29 CST 2018 SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss E"); System.out.println(sdf.format(date));//2018:09:07 10:30:29 星期五
·parse(String text):
//2008:08:08 08:08:08 与 yyyy:MM:dd HH:mm:ss 要完全匹配,差一点都不行 String datestr = "2008:08:08 08:08:08"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss"); System.out.println(sdf.parse(datestr));//Fri Aug 08 08:08:08 CST 2008
·Demo:计算出生到现在活了多少天;计算活到20000天是哪年哪月哪日。
Scanner scn = new Scanner(System.in); System.out.println("请输入生日:(eg:1998-01-28)"); String str = scn.nextLine(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date strdate = sdf.parse(str); Date date = new Date(); long current = date.getTime(); long day = 24*60*60*1000; long c = current - strdate.getTime(); System.out.println(c/day); //20000 long ms1 = strdate.getTime() + 20000*day; strdate.setTime(ms1); System.out.println(strdate);
Calendar
- java.util.Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
- 是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高利历,即通用的阳历),对应世界上绝对多数国家/地区使用的标准日历系统。
- 获取日期及时间分量:
- 类方法:
·getInstance():
使用默认时区和语言环境获得一个日历。返回的Calendar
基于当前时间,使用了默认时区和默认语言环境。
·getActualMaximum():
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。例如,在某些年份中,MONTH 字段的实际最大值是 12,而在希伯来日历系统的其他年份中,该字段的实际最大值是 13。
此方法的默认实现使用了一个迭代算法来确定日历字段的实际最大值。如果有可能的话,子类应该使用一个更有效的实现来重写此方法。
- 方法:
·getTime():
返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。/* * 获取一个Date实例 * getTime();Date * 此方法是calendar中的实例 * * 在Date中的getTime是获取毫秒值 */ Calendar calendar = Calendar.getInstance(); System.out.println(calendar); Date date = calendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String str = sdf.format(date); System.out.println(str);
/* * 将Date转换成Calendar */ Date date = new Date();//演示后面的时间 date.setTime(date.getTime()+(24L*60*60*1000)); Calendar calendar = Calendar.getInstance();//演示当前的时间 System.out.println(calendar); /* * 使当前的calendar用于表示date的时间 * setTime(Date date):void */ calendar.setTime(date); System.out.println(calendar);
·set(int field,value):
将给定的日历字段设置为给定值。 设置时间分量://操作时间的分量--->设置时间 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR,2008);//年 calendar.set(Calendar.MONTH,0);//月 0~11 calendar.set(Calendar.DATE,10);//等同于DATE_OF_MONTH 一个月中的某天 calendar.set(Calendar.HOUR_OF_DAY,8);//小时 calendar.set(Calendar.MINUTE,0);//分钟 calendar.set(Calendar.SECOND,58);//秒
·get(int field):
返回给定日历字段的值。public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH)+1);//0~11 System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); System.out.println(calendar.get(Calendar.MINUTE)); System.out.println(calendar.get(Calendar.SECOND)); System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); Date date = calendar.getTime(); System.out.println(date); print(date); } /*此方法是为了使打印结果看着更清晰明了*/ public static void print(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf.format(date)); }
· add(int field, int amount) :
根据日历的规则,为给定的日历字段添加或减去指定的时间量。public static void main(String[] args) { /*Calendar 时间计算*/ Calendar cal = Calendar.getInstance(); /*负值是减;正值是加*/ cal.add(Calendar.MONTH, 3); cal.add(Calendar.DATE, 10); Date date = cal.getTime(); print(date); } public static void print(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf.format(date)); }
·getActualMaximum(int field):
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。
Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));//当月最大天数 System.out.println(calendar.getActualMaximum(Calendar.MONTH));//一年中最大月数(11)
- Demo:三月零10天后,所在周的周三是哪天。
public static void main(String[] args) { // TODO Auto-generated method stub Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.add(Calendar.MONTH, 3); calendar.add(Calendar.DATE, 10); int xingqi = calendar.get(Calendar.DAY_OF_WEEK)-1; calendar.add(Calendar.DATE, 3-xingqi); Date date = calendar.getTime(); print(date); } public static void print(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf.format(date)); }