Java学习30-常用类 Date类
Date类
-
java.util.Date
-
java.util.Calendar(日历)
-
java.text.SimpleDateFormat格式化时间类 yyyy-MM-dd HH:mm:ss
Date类的用法,类似新建对象,然后调用method
比如
Date x= new Date();
x.getYear();
注意要导入包
import java.util.Date
Date类可调用的方法:
getYear()
获取年( //常用+1900,因为从1900年开始算的)
getMonth()
获取月(//常用+1,因为从0开始计算的)
getDate()
获取日(重要!!!会得到一个Date类型的object)
getHours()
获取小时
getTime()
是获取时间戳(重要!!!会得到一个Date类型的object),详解如下:
getTime()
java.util.Date 类的一个方法,用于获取日期对象表示的时间戳,返回的是毫秒形式。这个时间戳是自 1970 年 1 月 1 日 00:00:00 GMT(格林威治标准时间)以来经过的毫秒数。这个时间戳method可以用于比较日期对象之间的时间先后顺序,计算时间差等。
public class MyDateTest {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d); // 系统时间
//get...()——获取年月日.....
System.out.println(d.getYear()+1900); // 从1900年开始算的
System.out.println(d.getMonth()+1); // 月份从0开始计算
System.out.println(d.getDate()); // 天数
System.out.println(d.getHours());// 小时
//getTime()——获取时间戳,毫秒形式,返回的是long
System.out.println(d.getTime());
}
}
运行结果
Thu Feb 29 12:56:25 CST 2024
2024
2
29
12
1709182585127
注意:最后一行的时间戳1709182585127毫秒等于474772.94小时,约为19782.21 天,54.1978年,1970+54.1987=2024.1978年。符合上面秒描述的时间戳是计算自1970 年 1 月 1 日以来过去的毫秒数。
Calendar(日历)类
使用方法
Calendar x= Calendar.getInstance()
然后x.set(int年,int月...等)
比如
x.get(Calendar.YEAR)
x.get(Calendar.MONTH) 注意!!!角标0-11代表1-12月
x.get(Calendar.DATE)
x.get(Calendar.HOUR) 注意!!!这是十二进制的时间
x.get(Calendar.MINUTE)
x.get(Calendar.SECOND)
package Math;
import java.util.Calendar;
import java.util.Date;
public class MyDateTest {
public static void main(String[] args) {
Date x= new Date();
System.out.println(x.getYear());
System.out.println(x.getMonth());
System.out.println(x.getDate());
System.out.println(x.getTime());
System.out.println(x);
System.out.println("=====================>");
Calendar y= Calendar.getInstance();
y.set(1999,12,1,1,1,1);
System.out.println(y.get(Calendar.YEAR));
System.out.println(y.get(Calendar.MONTH));//注意看结果:月份是从0开始的算的
System.out.println(y.get(Calendar.DATE));
System.out.println(y.get(Calendar.HOUR));
System.out.println(y.get(Calendar.MINUTE));
System.out.println(y.get(Calendar.SECOND));
System.out.println("=====================>");
}
}
124
1
29
1709197390692
Thu Feb 29 17:03:10 CST 2024
=====================>
2000
0 //注意看:刚才set的是1999/12月1日,为什么这里显示的是2000年1月1日了?因为Calendar的月份角标是0:11,共12个月
1
1
1
1
=====================>
Process finished with exit code 0
- SimpleDateFormat.format(DateA) 自定义时间输出格式
第一步:先自定义输出想要的格式并且建立一个SimpleDateFormat类的objectA,
第二步:objectA去调用format method objectA.format(date类型/时间戳类型)
就可以让日期按照自定义的格式输出了。
用法如下(注意要写双引号):
SimpleDateFormat mydef = new SimpleDateFormat("yy-MM-dd !!! hh:mm:ss")
其中定义格式主要是下面这个部分:
yy年-MM月-dd日 !!!hh时:mm分:ss秒
年月日时间等都是可以前后打乱顺序写的,后面调用format()输出时,系统就会按照用户写的那个自定义格式输出。
举例:定义了如下的自定义格式
Date x= new Date();
SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
System.out.println(z.format(x));
结果输出就获得了
原本格式
2024-02-29 19:15:18
=======>
自定义输出后格式
2024-03-03; 07-15-18
注意到只有MM是大写,这是为了月和minutes区别开
当然,如此便可以自定义的年月日
类似的定义了Calendar y想要其按上面的方式输出日期格式,也可以:
Calendar y= Calendar.getInstance();
SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
System.out.println(z.format(y.getTime()));
思考上面这里为什么直接不写System.out.println(z.format(y))呢?提示,会报错,错误显示Cannot format given Object as a Date.
运行结果输出
2024-03-03; 07-15-18
知识补充:
对于上面的问题,如果对Calendar y取getClass()会得到 java.util.GregorianCalendar系统认为这是个Object,而format method 希望填充的是Date类型,这就是报错的原因,而对Calendar object使用getTime可以获得Date类型的object。
- CalendarA.set(1998,06,06,19,48,56) 自定义时间
Calendar类的objectA.set(年月日)
举例
SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
y.set(1999,9,9,19,06,02);
System.out.println(z.format(y.getTime()));
运行结果为:
(原始定义的是1999-10-09 注意月份角标系统内部是0:11)
1999-10-09; 07-06-02
- SimpleDateFormatA.parse(String)将把字符串转化成时间
具体用法
SimpleDateFormat类型object.parse(符合SimpleDateFormat自定义结构要求的字符串)
比如下面的代码sdf.parse(“2005-09-23 14:24:43”)其中sdf就是SimpleDateFormat类型的object,而sdf.parse内部的String就是按照sdf自定义的时间的格式写的String。
比如代码块为:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.parse("2005-09-23 14:24:43"));
输出为:
Fri Sep 23 14:24:43 CST 2005
练习:比较两个时间差
String s1 = “2024-02-12 13:00:00”; // 开始时间
String s2 = “2024-03-02 22:39:00”; // 结束时间
package Math;
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
public class datecompare {
public static void main(String[] args) throws ParseException {
String s1 = "2024-02-12 13:00:00"; // 开始时间
String s2 = "2024-03-02 22:39:00"; // 结束时间
SimpleDateFormat stru = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//parse(String)将把字符串转化成Date时间
//stru.parse(s1);
Date d1= stru.parse(s1);
Date d2= stru.parse(s2);
//把Date时间转换成long时间戳
long l1= d1.getTime();
long l2= d2.getTime();
long l=Math.abs(l2-l1);
//时间戳的long值相差
System.out.println(l);
System.out.println((l/(1000*60*60*24)));//day
System.out.println((l/(1000*60*60))%24);//hour
System.out.println((l/(1000*60))%60);//min
}
}
1676340000
19
9
39
Process finished with exit code 0