? ? ? ?? ? ? ? java的日期是从1970年1月1日0时0分0秒开始计时的(GMT时间)(GMT时间比中国时间少8小时)
目录
? ? ? ? 5.getTime方法(Calendar-->Date)
? ? ? ? 6.setTime方法 (Date-->Calendar)
????????????????1.Date与SimpleDatefomat
? ? ? ? ? ? ? ? 2.Calendar? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 打印的时候只需要传递进去Date对象的名字即可,会自动调用toString方法,会打印出来星期,年月日时分秒,但是隐藏的毫秒不会打印出来。
? ? ? ? ? ? ? ? ? ? ? ? 1.获取当前时间:
????????????????????????????????new Date();
? ? ? ? ? ? ? ? ? ? ? ? 2.根据毫秒数创建时间(从初始时间开始算起,经历过毫秒数时间的时间)
????????????????? ? ? ? ????????new Date(毫秒数);
? ? ? ? ? ? ? ? ? ? ? ? 3.通过格式化对象的parse方法来进行分析创建(示例在SimpleDateFormat里面)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 这个parse方法返回一个Date的结果,他的形参是个String类型的值,后面还会继续有他的存在
? ? ? ? ? ? ? ? ? ? ? ? 4.指定日期创建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new Date(年,月,日)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new Date(年,月,日,时,分)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new Date(年,月,日,时,分,秒)
? ? ? ? ? ? ? ? ? ? ? ? 如果在创建的时候年只写了个两位数,那么会默认加上个1900
? ? ? ? ? ? ? ? ? ? ? ? 月份不是直接填充一个月份,而是会按照数组下标的形式填充,假如你形参填写的0,那么实际上生成的是1月,如果你填写的数大于等于12了会产生进位,向“年”进位,具体进几还是要看你的月份是几
//获取当前时间
Date now = new Date();
//在打印的时候直接打印日期变量就行了,因为会自动调用日期的toString变量
System.out.println("现在是使用Date直接创建出来的时间?? "+now);
//通过其他方式来创建Date对象(指定年月的时候会让年月从)
//毫秒数创建
Date current = new Date(1);
//指定日期创建(日期创建的时候,需要注意两个问题一个是首先是年会自动加上1900,其次是月份是相当于一个数组,0月实际上代表的是一月,说白了就是个下标,但是当你写入的月份大于等于12的时候会产生进位给年)
Date date = new Date(-12,11,2);
//指定时分
Date time = new Date(12,12,14,12,12);
//指定时分秒
Date second = new Date(12,11,12,12,12,12);
SimpleDateFormat formatCreate = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
System.out.println("通过毫秒数创建时间 :"+formatCreate.format(current));
System.out.println("通过指定日期创建时间 :"+formatCreate.format(date));
System.out.println("通过指定时分秒创建时间:"+formatCreate.format(time));
System.out.println("通过指定时分秒创建时间:"+formatCreate.format(second));
运行结果:?
现在是使用Date直接创建出来的时间?? ?Sat Dec 23 10:50:20 CST 2023
通过毫秒数创建时间 ? :1970年01月01日 08点00分00秒 001毫秒
通过指定日期创建时间 ?:1888年12月02日 00点00分00秒 000毫秒
通过指定时分秒创建时间:1913年01月14日 12点12分00秒 000毫秒
通过指定时分秒创建时间:1912年12月12日 12点12分12秒 000毫秒
? ? ? ? ? ? ? ? ? ? ? ? 作用:这个方法会把一个jdk8中利用Instant创建的日期转化成Date的日期
????????????????????????性质:是一个静态方法
? ? ? ? ? ? ? ? ? ? ? ? 返回值:返回值是一个Date对象
? ? ? ? ? ? ? ? ? ? ? ? 形式参数:在使用这个方法的时候需要注意的是,形式参数是一个Instant对象
????????????????????????用法:Date a = Date.from(Instant对象名);
Instant a = Instant.now();
Date dateFromA = Date.from(a);
System.out.println(dateFromA);
? ? ? ? ? ? ? ? ? ? ? ? 根据指定定格式(形参里面的格式),来把Date的数据进行格式化、
? ? ? ? ? ? ? ? ? ? ? ? SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-ddd HH:mm:ss SSS);
? ? ? ? ? ? ? ? ? ? ? ? 在格式化的格式里面,年月日...这些不同标识之间的效果,可以用其他任意符号
Date nowTime = new Date();
SimpleDateFormat formatNowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
SimpleDateFormat formatNowTime1 = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
System.out.println("现在是使用SimpleDateFormat对刚才创建出来的时间进行格式化:"+"\n\t第一种格式,用-间隔开:"+formatNowTime.format(nowTime)+"\n\t第一种格式,用汉字间隔开:"+formatNowTime1.format(nowTime));
运行结果:
?现在是使用SimpleDateFormat对刚才创建出来的时间进行格式化:
? ? ?第一种格式,用-间隔开:2023-12-23 10:50:20 451
? ? ?第一种格式,用汉字间隔开:2023年12月23日 10点50分20秒 451毫秒
字母 | 表示的含义 |
y | 年 |
M? | 月 |
w | 年里面的周数 |
W | 月里面的周数 |
D | 年中的天数 |
d | 月中的天数 |
F | 月中的星期 |
E | 星期几 |
H | 几点(0~23) |
k | 几点(1~24) |
h | am/pm里的小时数(1~12) |
K | am/pm里的小时数(0~11) |
m | 分钟数 |
s | 秒数 |
S | 毫秒数 |
a | am/pm标记 |
? ? ? ? ? ? ? ? ? ? ? ? 1.作用:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把Date对象格式化(转化成某种格式)
? ? ? ? ? ? ? ? ? ? ? ? 2.返回值:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String类型的数据
? ? ? ? ? ? ? ? ? ? ? ? 3.形参:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Date对象
? ? ? ? ? ? ? ? ? ? ? ? 4.用法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String a = SimpleDateFormat对象.format(Date对象);
? ? ? ? ? ? ? ? ? ? ? ? 1.作用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把一个字符串按照某种格式转化成一个Date对象
? ? ? ? ? ? ? ? ? ? ? ? 2.限定条件:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 被转化的字符串必须要和格式化的格式相同
? ? ? ? ? ? ? ? ? ? ? ? 3.异常:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? parse方法在使用的时候会抛出一个ParseException异常,属于一个编译时异常,要进行预处理,使用try{}catch{}进行异常的捕捉
? ? ? ? ? ? ? ? ? ? ? ? 4.形式参数类型:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 形式参数是一个String类型的数据
? ? ? ? ? ? ? ? ? ? ? ? 5.返回值类型:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回值是一个Date对象
????????????????????????6.用法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Date a = SimpleDateFormat对象.parse(String类型待转化字符串);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }catch(ParseException e){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?e.printStackTrace;
????????????????????????????????}
String stringToDate ="2023-12-05 14:41:01 366";
SimpleDateFormat formatStringToDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//用于接受字符串
SimpleDateFormat otherFormat = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒SSS毫秒");//用于格式化成为我想要的样子
try{
Date resultDate = formatStringToDate.parse(stringToDate);
System.out.println("通过字符串创建的格式化日期:\t"+otherFormat.format(resultDate));
}catch(ParseException e ){
e.printStackTrace();
}
运行结果:
?????????通过字符串创建的格式化日期:?? ?2023年12月05日14点41分01秒366毫秒
? ? ? ? ? ? ? ? 虽然Calendar是一个抽象方法无法直接new一个对象,但是可以通过使用getInstance()来获取一个Calendar的实例,里面的时间是当前系统时间。
? ? ? ? ? ? ? ? eg:Calendar now = Calendar.getInstance();
? ? ? ? ? ? ? ? getInstance是一个静态方法,与Calendar类相关
????????????????作用:获取Calendar实例当中某些信息
? ? ? ? ? ? ? ? 性质:非静态方法
? ? ? ? ? ? ? ? 形参:枚举类型。(Calendar.YEAR? ? ? ? Calendar.MONTH? ? ? ? Calendar.DATE)等
形参在这里的作用就是通知这个方法,程序员要获取的是哪些信息
? ? ? ? ? ? ? ? 返回值:就是要获得的信息的类型
? ? ? ? ? ? ? ? 注意:这里获取到的月,和在Date中直接指定日期创建的时候一样0,代表1月,而且日期,月之类的还会产生进位
Calendar date = Calendar.getInstance();
//获取到当前的年月日,通过Calendar的get方法,把枚举对象传入进去即可获得对应枚举对象的结果,意思是告诉程序我要获取的到底是年还是月还是日,枚举对象是static的
int year = date.get(Calendar.YEAR);
int month = date.get(Calendar.MONTH);
int day = date.get(Calendar.DATE);
System.out.println("通过get方法获取到今天是"+year+"年"+(month+1)+"月"+day+"日");//由于说了MONTH获取到的是从0开始技术的,所以这个month比实际的月份小1,要打印真实月份一定要加一
? ? ? ? ? ? ? ? 1.作用:给Calendar实例中的某个具体信息进行赋值(覆盖原有的值)
????????????????2.性质:非静态方法
? ? ? ? ? ? ? ? 3.形参:
????????????????????????set方法里面的参数一般采用键值对的形式:(要设置的内容,设置成为的值)
????????????????????????set方法的参数还可以直接使用(年,月,日)
????????????????4.没有返回值
????????????????注意:设置年月日,这里的年就是你输入的年,不加那个1900了,月和刚才一样也是从0开始计数的
Calendar setDate = Calendar.getInstance();
setDate.set(Calendar.YEAR,2004);
setDate.set(Calendar.MONTH,3);
setDate.set(Calendar.DAY_OF_MONTH,30);
int year1 = setDate.get(Calendar.YEAR);
int month1 = setDate.get(Calendar.MONTH);
int day1 = setDate.get(Calendar.DATE);
System.out.println("通过set方法设置出生日期:"+year1+"年"+(month1+1)+"月"+day1+"日");
? ? ? ? ? ? ? ? 1.作用:利用已有时间计算下一个时间 并且进行更改,具体来讲就是通过某一项日期信息,让其与给定的数值做加法然后把结果作为新的日期信息
? ? ? ? ? ? ? ? 2.性质:非静态方法
? ? ? ? ? ? ? ? 3.形参:?add方法采用键值对的形式:(要设置的内容,要加的值)
? ? ? ? ? ? ? ? 4.返回值:没有返回值
Calendar now = Calendar.getInstance();
Date nowFromCalendar;
now.add(Calendar.YEAR,-19);
now.add(Calendar.MONTH,-8);
now.add(Calendar.DAY_OF_MONTH,7);
nowFromCalendar = now.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");//格式化一下看的比较清晰
System.out.println("通过add方法,利用现在的时间计算我的出生日期,并且转化成为Date对象并进行格式化的结果为:"+sdf.format(nowFromCalendar));
? ? ? ? ? ? ? ? 1.作用:Calendar-->Date
? ? ? ? ? ? ? ? 2.性质:非静态方法
? ? ? ? ? ? ? ? 3.形参:不需要形参
? ? ? ? ? ? ? ? 4.返回值:返回一个Date对象
Calendar setDate = Calendar.getInstance();
Date a = setDate.getTime();//在从日历转Date的时候,没设置的量会自动按照当前系统时间进行转化(在这里就是时分秒)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");//格式化一下看的比较清晰
System.out.println("通过Calendar-->Date获取到的日期如下");
System.out.println("\t通过getTime方法得到Date效果下的现在的时间:"+sdf.format(a));
????????????????1.作用:Date-->Calendar
? ? ? ? ? ? ? ? 2.性质:非静态方法
? ? ? ? ? ? ? ? 3.形参:Date类型的一个时间
? ? ? ? ? ? ? ? 4.返回值:没有返回值
Date a = new Date(104,3,30);
Calendar setDayFromDate = Calendar.getInstance();
setDayFromDate.setTime(a);
int year2 = setDayFromDate.get(Calendar.YEAR);
int month2 = setDayFromDate.get(Calendar.MONTH);
int day2 = setDayFromDate.get(Calendar.DATE);
System.out.println("通过Date-->Calendar获取到的日期\n\t通过setTime方法得到的Calendar效果下的出生日期:"+year2+"年"+(month2+1)+"月"+day2+"日");
public class Common {
public static void main(String[] args) {
//java中的时间计算方法:是利用毫秒来计时的,是一个long类型的数据,从GMT时间的1970年一月一日0时0分0秒0毫秒开始计时的;
//使用System.currentTimeMillis()方法来获取现在的毫秒数
long nowCurrentTime = System.currentTimeMillis();
System.out.println("现在的毫秒数:"+nowCurrentTime);
//通过毫秒数来获取时间,
Date nowCurrenTimeCreatDate = new Date(nowCurrentTime);
Date timeBegin = new Date(0);
Date lastYear = new Date(nowCurrentTime-365*60*24*60*1000l);//需要注意,这个毫秒数超过了int的范围,所以要转化一下其中一个数,让其成为long类型,虽然在进行毫秒数填入的时候会强制转换成long类型但是在我先进行计算的时候会按照int进行计算已经超过范围了会先进行截断然后才会进行自动类型转换
SimpleDateFormat formatTimeCurrent = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
SimpleDateFormat formatTimeBegin = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
SimpleDateFormat formatLastYear = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
System.out.println("通过现在的毫秒数创建的时间:"+formatTimeCurrent.format(nowCurrenTimeCreatDate));
System.out.println("java日期的起始记数时间:"+formatTimeBegin.format(timeBegin));//打印的结果和预估差八小时的原因是,打印出来的时CST的时间,但是计时是按照GMT来进行计时的,这里进行了转换
System.out.println("去年的现在:"+formatLastYear.format(lastYear));
//直接使用Date创建对象需要new出来一个日期,这样会获取n到当前的时间,
//在打印Date类型的时候会默认调用它的toString方法
Date nowTime = new Date();
System.out.println("现在是使用Date直接创建出来的时间\t"+nowTime);
//通过其他方式来创建Date对象(指定年月的时候会让年月从)
//毫秒数创建
Date current = new Date(1);
//指定日期创建(日期创建的时候,需要注意两个问题一个是首先是年会自动加上1900,其次是月份是相当于一个数组,0月实际上代表的是一月,说白了就是个下标,但是当你写入的月份大于等于12的时候会产生进位给年)
Date date = new Date(-12,11,2);
//指定时分
Date time = new Date(12,12,14,12,12);
//指定时分秒
Date second = new Date(12,11,12,12,12,12);
SimpleDateFormat formatCreate = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
System.out.println("通过毫秒数创建时间 :"+formatCreate.format(current));
System.out.println("通过指定日期创建时间 :"+formatCreate.format(date));
System.out.println("通过指定时分秒创建时间:"+formatCreate.format(time));
System.out.println("通过指定时分秒创建时间:"+formatCreate.format(second));
//对于Date创建出来的时间进行格式化:
//new SimpleDateFormat(【里面存放格式】);
//format()方法返回的是一个String类型的值
SimpleDateFormat formatNowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
SimpleDateFormat formatNowTime1 = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
System.out.println("现在是使用SimpleDateFormat对刚才创建出来的时间进行格式化:"+"\n\t第一种格式,用-间隔开:"+formatNowTime.format(nowTime)+"\n\t第一种格式,用汉字间隔开:"+formatNowTime1.format(nowTime));
//字符串转日期:
//通过格式化类进行字符串到日期的转化
//限定条件:字符串的格式必须要和格式化的格式相同
//通过格式化对象调用parse方法,parse的汉语翻译是对语法进行分析,并且返回一个Date类型的对象
String stringToDate ="2023-12-05 14:41:01 366";
SimpleDateFormat formatStringToDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//用于接受字符串
SimpleDateFormat otherFormat = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒SSS毫秒");//用于格式化成为我想要的样子
try{
Date resultDate = formatStringToDate.parse(stringToDate);
System.out.println("通过字符串创建的格式化日期:\t"+otherFormat.format(resultDate));
}catch(ParseException e ){
e.printStackTrace();
}
//应用:统计执行时间长度:
long currenttime = System.currentTimeMillis();
int sum = 0;
int x = 0;
for(int i = 0; i<1000;i++){
//System.out.println(i);//有这句的话打印结果不是0,如果没有的话执行结果是0,因为循环不需要时间
}
long currenttime2 = System.currentTimeMillis();
System.out.println("程序执行时间:"+(currenttime2-currenttime));
}
public class Run {
public static void main(String[] args) {
//Calendar是个抽象类,无法直接new对象,但是可以通过getInstance方法来获取一个Calendar的实例
//Calendar的枚举常量当中MONTH和Date的时候设置的一样,都是0为一月,而且都是会自动进位
Calendar date = Calendar.getInstance();
//获取到当前的年月日,通过Calendar的get方法,把枚举对象传入进去即可获得对应枚举对象的结果,意思是告诉程序我要获取的到底是年还是月还是日,枚举对象是static的
int year = date.get(Calendar.YEAR);
int month = date.get(Calendar.MONTH);
int day = date.get(Calendar.DATE);
System.out.println("通过get方法获取到今天是"+year+"年"+(month+1)+"月"+day+"日");//由于说了MONTH获取到的是从0开始技术的,所以这个month比实际的月份小1,要打印真实月份一定要加一
//设置年月日,这里的年就是你输入的年,不加那个1900了
//直接使用set方法
//set方法里面的参数一般采用键值对的形式:(要设置的内容,设置成为的值)
//set方法的参数还可以直接使用(年,月,日)
Calendar setDate = Calendar.getInstance();
setDate.set(Calendar.YEAR,2004);
setDate.set(Calendar.MONTH,3);
setDate.set(Calendar.DAY_OF_MONTH,30);
int year1 = setDate.get(Calendar.YEAR);
int month1 = setDate.get(Calendar.MONTH);
int day1 = setDate.get(Calendar.DATE);
System.out.println("通过set方法设置出生日期:"+year1+"年"+(month1+1)+"月"+day1+"日");
//Calendar-->Date与Date转Calendar,
//两者都调用Calendar实例的方法,前者调用getTime(),后者调用setTime(Date对象)
//Calendar-->Date
Date a = setDate.getTime();//在从日历转Date的时候,没设置的量会自动按照当前系统时间进行转化(在这里就是时分秒)
Date b = date.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");//格式化一下看的比较清晰
System.out.println("通过Calendar-->Date获取到的日期如下");
System.out.println("\t通过getTime方法得到Date效果下的出生的时间:"+sdf.format(a));
System.out.println("\t通过getTime方法得到Date效果下的现在的时间:"+sdf.format(b));
//Date-->Calendar
Calendar setDayFromDate = Calendar.getInstance();
setDayFromDate.setTime(a);
int year2 = setDayFromDate.get(Calendar.YEAR);
int month2 = setDayFromDate.get(Calendar.MONTH);
int day2 = setDayFromDate.get(Calendar.DATE);
System.out.println("通过Date-->Calendar获取到的日期\n\t通过setTime方法得到的Calendar效果下的出生日期:"+year2+"年"+(month2+1)+"月"+day2+"日");
//add方法
//和set方法类似,不过add是在原有基础上进行加减,而set是覆盖设置
//在这里我获取一下现在的时间,然后年-19,月-8,日+7就可以得到我的出生日期
Calendar now = Calendar.getInstance();
Date nowFromCalendar;
now.add(Calendar.YEAR,-19);
now.add(Calendar.MONTH,-8);
now.add(Calendar.DAY_OF_MONTH,7);
nowFromCalendar = now.getTime();
System.out.println("通过add方法,利用现在的时间计算我的出生日期,并且转化成为Date对象并进行格式化的结果为:"+sdf.format(nowFromCalendar));
}
}
? ? ? ? ? ? ? ? 在这里首先有几个变量如下
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒 SSS毫秒");
Calendar rili = Calendar.getInstance
Instant instant = Instant.now();
StringDate =?"2004年04月30日 17点37分00秒 000毫秒"
方法名 | 所属类 | 性质 | 形参 | 返回值 | 例子 |
from | Date | 静态 | Instant对象 | Date对象 | Date a = Date.from(instant); |
currentTimeMillis | System | 静态 | long | long a = System.currentTimeMillis(); | |
getInstance | Calendar | 静态 | 日历实例 | Calendar a = Calendar.getInstance(); | |
get | Calendar | 非静态 | 枚举常量 | 与信息相关 | int year = rili.get(Calendar.YEAR); |
set | Calendar | 非静态 | 键值对 | rili.set(Calendar.YEAR,2004); | |
年月日 | rili.set(2004,3,30); | ||||
add | Calendar | 非静态 | 键值对 | rili.add(Calendar.YEAR,-1); | |
getTime | Calendar | 非静态 | Date对象 | Date a = rili.getTime(); | |
setTime | Calendar | 非静态 | Date对象 | rili.set(date); | |
format | SimpleDateFormat | 非静态 | Date对象 | String类型 | String a = sdf.format(date); |
parse | SimpleDateFormat | 非静态 | String类型 | Date对象 | Date a = sdf.parse(strDate); |