System在时间中的方法
时间操作
// System.currentTimeMillis(); 取1970年1月1日起,至当前时间的毫秒.
//System.currentTimeMillis()/1000/60/60/24/365 通过除法得出1970年1月1日起,至当前时间的年数.
//System.currentTimeMillis()1.0/1000/60/60/24/365 通过除法得出1970年1月1日起,至当前时间的详细年数(即浮点小数)
===Date类
一/Date类 的操作
时间操作
构造方法1/ public date() 获取最接近毫秒(最准确的)的当前时间 如:Fri Dec 20 09:45:50 CST 2019
构造方法2/ public date(long类型参数) 以1970年1月1日为起点,把输入的数值当作其终点毫秒数,然后计算从起点(1970年1月1日)到该毫秒数的终点时间.
如参数数值为{100060*60} 则为:1000毫秒乘以60再乘以60,也就是一小时.
那么时间就会从起点的’1970年1月1日8点’变为’1970年1月1日9点;
即:把输入一个数值当作毫秒数,此时会计算从1970年1月1日8点到该毫秒值的时间点.
以上两种构造方法,是指在创建Date对象时进行的传参使用
二/常用方法
1/ getTime(); 获取1970年1月1日起至当前的毫秒数 效果同System类的静态方法currentTimeMillis()和无参构造的public date()一致.
2/ setTime(long类型参数); 以1970年1月1日为起点,以毫秒数为单位来设置时间. 效果同构造方法的’date(long类型参数)'一样
注意:如果要设置为当前时间,则括号内的参数出不能直接为date的对象名,可以是同为Long类型的System.currentTimeMillis
**======== =SimpleDateFormat类======================**
时间格式
一/SimpleDateFormat类 的操作
构造方法1/ public SimpleDateFormat() 以默认的日期时间格式和符号,来表示日期时间.
构造方法2/ public SimpleDateFormat(String pattern) 手动设置指定的日期时间之格式与符号,来表示日期时间.
二/常用方法
1/ format(日期数据) 将Date等对象获取的日期时间以字符串返回,如将println打印输出的Date对象所获取的日期时间,转换为字符串.
理解:非String型的日期数据(如Date) -------> String
2/ parse(日期字符串) 将String字符串中的日期,赋值给一些日期属性的对象,如Date类属性的对象.
理解:String --------> 非String型的日期数据(如Date)
要求:String中的字符串日期格式,必须同 日期对象中的格式相同.而无参构造所默认的格式跟Date的日期格式是相同的,可以直接转换.
====Calendar
日期(日历表)操作
1/ 对象名.get(Calendar.日期单位) 获取当前年月日时分等等
格式如: int nianYear = calendarObj.get(Calendar.YEAR)
2/ 对象名.add(Calendar日期单位.数值) 从当前的数值单位(年/月/日/时/分)获取今后或从前的时间单位.
比如括号为'Calendar.YEAR.-5'则是获取5年前的年数,'Calendar.YEAR.+5'则是获取5年后的;
格式如:calendarObj.add(Calendar.YEAR,-13);
3/ 对象名.set(单位数值) 直接设置该Calendar对象的日历日期,如:calendarObj.set(2016,7,21) 则日期被设置为:2016年6月21日.
格式如: calendarObj.set(2016,4,21,21,21);
注意:1/在系统中,月份是以0为起点,所以假如这个月份是11月,那么系统中其实是10月
2/在系统中,一个星期的第一天是星期天,因此假若一个数值为2的星期数值,那么结果则为星期1.
时间操作/时间格式处理之代码
public class SystemMian {
public static void main(String[] args) {
//时间
// System.currentTimeMillis(); 取1970年1月1日起,至当前时间的毫秒.
//System.currentTimeMillis()/1000/60/60/24/365 通过除法得出1970年1月1日起,至当前时间的年数.
//System.currentTimeMillis()*1.0/1000/60/60/24/365 通过除法得出1970年1月1日起,至当前时间的详细年数(即浮点小数)
System.out.println(System.currentTimeMillis() / 1000 / 60 / 60 / 24 / 365 + "年");
System.out.println(System.currentTimeMillis() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//'currentTimeMillis' 在'耗时'方面的应用.
//如计算执行某个代码耗时了多久. 计算for循环一万次用了多久
long start = System.currentTimeMillis();//此处以1970年1月1日至现在的毫秒值为计时开始 cureentTimeMillis的返回值有'long'类型,因此变量类型也应为long.
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();//此处以1970年1月1日至现在的毫秒值为计时结束.
System.out.println("毫秒数为:"+(end-start));
System.out.println("计时开始的'start'毫秒数为:"+start);
System.out.println("计时结束的'end'毫秒数为:"+end);
int result = (int)(end-start); //用计时结束的毫秒值减去计时开始的毫秒值,从而得出这之间耗时了多久.
//因为'System.currentTimeMillis'的返回值类型为long,因此需要用括号让'计时开始'和'计时结束'以int型进行计算,随后再以int型转换来赋值给左侧的变量.
System.out.println("所耗时为"+result+"毫秒");
}
}
public class DateOfTime {
public static void main(String[] args) throws ParseException {
// ===========================================Date类=======================================
//构造方法1 获取当前时间
Date dateObj = new Date();
System.out.println(dateObj);//Systen,out.println(Date对象); 可直接获取时间.
System.out.println("================");
//构造方法2 毫秒数值:1000*60*60(一小时) 过程:Thu Jan 01 08:00:00 CST 1970(隐性计算起点) ====到====> Thu Jan 01 09:00:00 CST 1970(显性计算终点)
Date dateObjTwo = new Date(1000 * 60 * 60L);
System.out.println(dateObjTwo);//Thu Jan 01 09:00:00 CST 1970
System.out.println("================");
//方法1 getTime(); 获取1970年1月1日至当今的毫秒数
Date dateObjThree = new Date();
System.out.println(dateObjThree.getTime());
System.out.println(dateObjThree.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365+"年"); //获取年的算法,如果要去掉双精度,那么就去掉其中的'*1.0'.
System.out.println("================");
//方法2 setTime();
dateObjThree.setTime(1000*60*60*24*365L); //设置1970年1月1日起至毫秒数所规定的终点时间 如参数为:1000*60*60*24*365L 则日期为:Fri Jan 01 08:00:00 CST 1971
System.out.println(dateObjThree);
dateObjThree.setTime(System.currentTimeMillis());//参数为System.currentTimeMillis()则为获取当前时间,System.CurrentTimeMillis用于获取以毫秒数为单位的当前时间.
System.out.println(dateObjThree);
System.out.println("================");
// ===========================================SimpleDateFormat类=======================================
System.out.println("======================SimpleDateFormat类================d===========");
SimpleDateFormat simpleDateFormatObj = new SimpleDateFormat();//以默认的日期时间格式和符号,来表示日期时间. 如:2019/12/20 上午11:35
SimpleDateFormat simpleDateFormatObjTwo = new SimpleDateFormat("YY-LL-dd-HH-mm-ss");//以指定日期格式来表示日期时间 其中的'-'为年月日时分秒之间的分割符号
//如:19-12-20-11-35-44
//format 日期数据 ------> String
String timeString = simpleDateFormatObj.format(dateObj); //默认格式:对象类型的日期,转为字符串类型的日期
System.out.println(timeString);
String timeStringTwo = simpleDateFormatObjTwo.format(dateObj); //指定格式:对象类型的日期,转为字符串类型的日期
System.out.println(timeStringTwo);
//parse String --- 日期数据
// dateObjTwo = simpleDateFormatObj.parse(timeStringTwo); //此处出现异常,输入Alt+Enter,选择Add exception to method signature进行异常处理,即可不会报错.
// System.out.println(dateObjTwo); //此处因为日期格式不对等,所以运行后出现报错.
String timeStringThree = "Thu Jan 01 012:00:00 CST 2019"; //此处日期格式相同,那么就可以正常输出. 因为SimpleDateFormat默认的日期格式,同Date的默认日期格式是相对等的
dateObjTwo = simpleDateFormatObj.parse(timeString); //
System.out.println(dateObjTwo);
}
}
**日期操作**
```java
public class calendarLoad {
public static void main(String[] args) {
Calendar calendarObj = Calendar.getInstance(); //因为Calendar类是一个抽象类,因此实际上我们使用的是它的子类方法,所以直接new的话会重写.
//为此,Calendar特意给出了一个static静态方法,以便我们用它的日历功能.
// 1/ 对象名.get(Calendar.日期单位) 获取当前年月日时分等等
int nianYear = calendarObj.get(Calendar.YEAR); //获取当前年
int yueMonth = calendarObj.get(Calendar.MONTH);//获取当前月 特殊:在系统中,第一个月份为数值0
int riDayDate = calendarObj.get(Calendar.DATE);//获取当前日 ,此处并非为单词'day'而是'date'
int xingqiSUNDAY = calendarObj.get(Calendar.SUNDAY);//获取当前星期 特殊:在系统中,一个星期的第一天为星期一
int xiaoshi = calendarObj.get(Calendar.HOUR);//获取当前小时
System.out.println("当前年"+nianYear+" 当前月"+yueMonth+" 当前日"+riDayDate+" 当前星期"+xingqiSUNDAY+" 获取当前小时"+xiaoshi);
System.out.println("==================");
// 2/ 对象名.add(Calendar日期单位.数值) 从当前的数值单位(年/月/日/时/分)获取今后或从前的时间单位.
calendarObj.add(Calendar.YEAR,-13);
calendarObj.add(Calendar.MONTH,-4); //获取今年8月的. 但系统为7,因为系统把月数从0开始算.
calendarObj.add(Calendar.DATE,-2); // 获取2天前
calendarObj.add(Calendar.HOUR,-5); //获取 5小时前
nianYear = calendarObj.get(Calendar.YEAR);
yueMonth = calendarObj.get(Calendar.MONTH);
riDayDate = calendarObj.get(Calendar.DATE);
xiaoshi = calendarObj.get(Calendar.HOUR);
System.out.println("获取前13年为:"+nianYear+" 获取前4月为:"+yueMonth+" 获取前2日为:"+riDayDate+" 获取前5小时为:"+xiaoshi);
System.out.println("===================");
// 3/ 对象名.set(单位数值) 直接设置该Calendar对象的日历日期,如:calendarObj.set(2016,7,21) 则日期被设置为:2016年6月21日.
calendarObj.set(2016,4,21,21,21);
nianYear = calendarObj.get(Calendar.YEAR); //获取当前年
yueMonth = calendarObj.get(Calendar.MONTH);//获取当前月 特殊:在系统中,第一个月份为数值0
riDayDate = calendarObj.get(Calendar.DATE);//获取当前日 ,此处并非为单词'day'而是'date'
xiaoshi = calendarObj.get(Calendar.HOUR);//获取当前小时
int fenzhong_Minute = calendarObj.get(Calendar.MINUTE);//获取当前分钟
System.out.println("获取当前设置了的年份为:"+nianYear+" 获取当前设置了的月份为:"+yueMonth+" 获取当前设置了的日期为:"+riDayDate+" 获取当前设置了的小时为:"+xiaoshi+" 获取当前设置了的分钟为:"+fenzhong_Minute);
}
}