时间Date
java中的时间
Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点;
固定的时间点叫纪元(epoch),是UTC时间1970年1月1日 00:00:00;
UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time 格林威治时间)一样,是一种具有实际目的的科学标准时间。
Date类
Date:年月日 时分秒 时区 星期
long—毫秒(时间计时)
java.util.Date —显示时间,年月日···显示
Calender —万年历——有年月日、时分秒··(特别多,尽量不用来打印年月日) 时间计算、跳转,复杂的时间计算,时间分量 ——抽象类,不能new(不能实例化,但是提供了一个静态方法)
Calendar cal=Calendar.getInstance();//提供了一个静态方法
long = 0 表示的时间:计算机开始的时间(人们定下来的)—1970年1月1日 —格林威治时间
当前系统时间
System.currentTimeMills()
new Date()
public static void main(String[] args) {
long time=System.currentTimeMillis();
System.out.println(time);//1614764723885
//获得当前系统时间
Date date=new Date();
System.out.println(date);//Date已经重写了toString //Wed Mar 03 17:45:23 CST 2021
//获得指定的long毫秒所表示的时间
date=new Date(0l);//0l(英文字母l)
System.out.println(date);//Thu Jan 01 08:00:00 CST 1970
}
long和Date的转换应用:
可以用getTime()将时间转换为毫秒,用setTime()将毫秒转换为时间
public static void main(String[] args) {
long time=System.currentTimeMillis();
Date date=new Date();
//将date设置为明天的这个时候
time=time+24l*60*60*1000;//ms为单位,int类型数据有范围,超过会为负数,应该写为long类型
date.setTime(time);
System.out.println(date);//Thu Mar 04 22:02:37 CST 2021
//得到Date对应的毫秒值
time=date.getTime();
System.out.println(time);//1614866557008
}
DateFormate
时间显示——格式化——显示出来——DataFormat—>抽象类
SimpleDateFormat子类
java.text.SimpleDateFormat是一个以语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期–>文本)、解析(文本–>日期)和规范化。
format(Date date)–Date->String
- 将日期格式化成日期/时间字符串
/* 日期格式化*/
public static void main(String[] args) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date();
String dateStr=sdf.format(date);
System.out.println(dateStr);//2021-03-06 21:48:51
}
parse(String source)方法–String->Date
- 要throws ParseException
public static void testParse() throws ParseException {
String str="2021-03-06";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=sdf.parse(str);
System.out.println(date);//Sat Mar 06 00:00:00 CST 2021
}
public static void main(String[] args) throws ParseException {
Date date=new Date();
System.out.println(date);//Sat Mar 06 15:52:27 CST 2021
//1.时间显示-格式化-DateFormat->抽象类
//向上造型-SimpleDateFormat是DateFormat的一个子类,可以new
//a. 确定格式--文本-->日期
DateFormat mat=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
//b. 调用方法格式化->返回一个格式化好的字符串
//HH是24小时进制的,hh是12小时进制的
String str=mat.format(date);
System.out.println(str);//2021年03月06日 03:52:27
//2.将字符串 转换成对应的Date对象->parse方法,注意会抛出异常—>如果格式不对就会抛出异常
DateFormat mate1=new SimpleDateFormat("yyyy-MM-dd");
//2021-03-06
String str1="2021-03-06";
Date d= mate1.parse(str1);
System.out.println(d);//Sat Mar 06 00:00:00 CST 2021
}
字符 | 含义 | 实例 |
---|---|---|
y | 年 | yyyy年——2017年;yy——17年 |
M | 月 | MM月——01月;M月——1月 |
d | 日 | dd日——06日;d日——6日 |
E | 星期 | E——星期日(Sun) |
a | AM或PM标识 | a—下午(PM) |
H | 小时(24小时制) | a h时—下午12时 |
h | 小时(12小时制) | HH:mm:ss—12:46:33 |
m | 分钟 | hh(a):mm:ss—12(下午):47:48 |
s | 秒 |
Calendar
java.util.Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行计算;
Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高里厉,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。
getInstance方法
- Calendar提供了一个类方法getInstance,以获得此类型的一个通用对象;
- Calendar的getInstance方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化:
public static void testGetInstance(){
Calendar c=Calendar.getInstance();
//输出Calendar对象所属的实际类型
System.out.println(c.getClass().getName());//java.util.GregorianCalendar
//getTime方法返回对应的Date对象
System.out.println(c.getTime());//Sat Mar 06 22:07:51 CST 2021
//创建GregorianCalendar对象
GregorianCalendar c1=new GregorianCalendar(2021,Calendar.DECEMBER,25);
System.out.println(c1.getTime());//Sat Dec 25 00:00:00 CST 2021
}
getActualMaximum方法
int getActualMaximum(int field) 给定此Calendar的时间值,返回指定日历字段可能拥有的最大值:
int year=2021;
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,year);
c.set(Calendar.DATE,1);
for(int month=Calendar.JANUARY;month<=Calendar.DECEMBER;month++){
c.set(Calendar.MONTH,month);
System.out.println(year+"年"+(month+1)+"月:"+c.getActualMaximum(Calendar.DATE)+"天");
/*2021年1月:31天
2021年2月:28天
2021年3月:31天
2021年4月:30天
2021年5月:31天
2021年6月:30天
2021年7月:31天
2021年8月:31天
2021年9月:30天
2021年10月:31天
2021年11月:30天
2021年12月:31天
*/
getTimeInMills
- 以毫秒为单位返回此日历的时间值
setTimeInMills
- 给定的长值设置此日历的当前时间
compareTo
- 比较时间值(毫秒表示)Calender对象
get-获得时间分量
set-设置时间分量
Calendar cal=Calendar.getInstance();//add get set
//1.获得时间分量 年 月 日 时 分 秒···
//YEAR MONTH(从0开始) DATE/DATE_OF_MONTH DATE_OF_WEEK···
int year=cal.get(Calendar.YEAR);
System.out.println("year:"+year);//year:2021
int month=cal.get(Calendar.MONTH);
System.out.println("month:"+month);//month:2
//2.设置时间分量
cal.set(Calendar.YEAR,2001);//2001 10 1
cal.set(Calendar.MONTH,Calendar.OCTOBER);
cal.set(Calendar.DATE,1);
System.out.println("星期:"+Calendar.DAY_OF_WEEK);//星期:7
add-时间推算
//3.时间推算-add
//今天入职——想知道入职3年后的今天,是星期几
cal.add(Calendar.YEAR,3);
System.out.println("入职3年后的今天,是星期:"+cal.get(Calendar.DAY_OF_WEEK));//入职3年后的今天,是星期:6
//今天生产,保质期是15天——几月几号
cal.add(Calendar.YEAR,-3);
cal.add(Calendar.DATE,15);
System.out.println("什么时候过期:"+cal.get(Calendar.MONTH)+"-"+cal.get(Calendar.DATE));//什么时候过期:9-16