我们来通过几个实操,来了解Date类的几个用法
1.声明一个Date now对象【util包下的Date类】
Date now = new Date( );
now.toString //【调用Date中重写的toString( )】
System.out.println(now.toString); //试一试
System.out.println(now); //或者试一试它
2.当前时间对象的毫秒数 【相对于纪元】【lang包下的System.currentTime】
System.currentTimeMillis(); //当前时间对象的毫秒数【返回long】
首先记得导包
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now.toString()); //当前系统的时间【默认格式】
long nowTime = System.currentTimeMillis(); //当前时间对象的毫秒数【返回long】
/*
* 计算long的最大值毫秒数,作为距离公元0纪元的时间点
*/
System.out.println(nowTime);
输出结果:
所谓的【纪元】指的是1970/01/01 00:00:00这个时刻
3.long类型的数据,到底能累计毫秒数到多少年?
目标:1. 获取long类型的最大值
换算年数
long max = Long.MAX_VALUE; //long的最大值
System.out.println(max);
long Years = max/365/24/60/60/1000;
System.out.println("公元"+(Years+1970)+"年");
自己试一试吧,大概还能计时2亿多年。。。。。。。。。。。。。。。。。。地球还有人类存活吗?
4.Date类的构造器【构造器(long)设置时间ms】
Date d1 = new Date(900000000000L); //int转成long
System.out.println(d1);
输出距离纪元1970/1/1 第900,000,000,000ms后的时间点
输出结果:
第900,000,000,000ms后才到98年。
5.Date对象.getTime( ); 【返回long表示ms;构造器(无参)】
Date nowOne = new Date( );
nowOne.getTime( ); 【返回long 类型的整数】
【也是返回毫秒数】
Date nowOne = new Date();
System.out.println(nowOne);
long minits = nowOne.getTime();
System.out.println(minits); //当前时间的毫秒数
6.Data对象.setTime( );【返回void;构造器(long)设置时间ms】
Date nowTwo = new Date();
nowTwo.setTime(nowTwo.getTime()-24*60*60*1000);
System.out.println("现在时间"+nowTwo);
此程序完成了当前时间点 -1day 的操作
=======================================================================
1).无参构造器
SimpleDateFormat(String pattern);
/*
*系统会提供默认格式
*/
2). 调用有参构造器后,将Date类的实例转换格式
SimpleDateFormat sdf3 = new SimpleDateFormat( String str );
sdf3.format( Date date )
/*
*str = "yyyy-MM-dd \t E \n (a)hh:mm:ss"
*或者其他格式
*/
3). parse ( String str )
字符串转换为日期格式【可自定义】
SimpleDateFormat sdf = new SimpleDateFormat();
Date now = new Date(); //创建Date类 now对象
System.out.println("自动调用toString "+now); //输出一下Date now
/**方法String format(Date date)*/
String str = sdf.format(now); //返回值String,str来接收
System.out.println("无参构造器的格式"+str);
输出结果为:
=====================================
=====================================
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd \t E \n (a)hh:mm:ss");
String str1 = sdf2.format(now); //返回值String,str来接收
System.out.println("有参构造器的格式"+str1);
System.out.println("===========================================");
输出结果为:
SimpleDateFormat sdf3 = new SimpleDateFormat("yy-MM-dd-E \n HH:mm:ss");
String str3 = sdf3.format(now); //返回值String,str来接收
System.out.println("有参构造器的格式二:"+str3);
System.out.println("===========================================");
输出结果为:
PS:yyyy:代表年
MM:代表月份【 一定要严格区分大小写】
dd: 代表本月的第几天 【DD是本年度第几天】
hh: 代表小时 【12小时制,通常配合(a)上下午使用】
HH: 代表小时 【24小时制】
mm: 代表分钟minute
ss: 秒数五厘米的秒,second
========================半点都不华丽的分割线===========================
咱们计算自己活了多少天
Scanner in = new Scanner(System.in); //开启控制台输入
System.out.println("请输入出生年月\n"+"输入格式为"+"yyyy/MM/dd");
String birthday = in.next();
SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy/MM/dd");
Date date5 = sdf5.parse(birthday);
//
long time = (new Date()).getTime()-date5.getTime(); //当前毫秒数-那时的毫秒数
long livedays = time/1000/60/60/24;
System.out.println(livedays);
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970 年 1 月 1 日的00:00:00.000 )的偏移量。----【转】
下面操作一番:
//静态方法类名直接调用,得到实例
Calendar now = Calendar.getInstance(); //instance代表实例
//调用toString显示日历信息详情
System.out.println(now);
得到当前历法:Gregorian历法
得到这么一串信息:
java.util.GregorianCalendar[time=1528161478682,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=156,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=17,SECOND=58,MILLISECOND=682,ZONE_OFFSET=28800000,DST_OFFSET=0]
其中Calendar.MONTH 是从0开始的。。。。所以MONTH=5,其实代表6月【MONTH范围:0~11】
DAY_OF_WEEK从周日开始的。。。。所以DAY_OF_WEEK=3,其实是周二【DAY_OF_WEEK范围:1~7】
======================================================================
实际上我们使用的是Gregorian类
Date now = new Date ( );
String classname = now.getClass().getName(); //获取当前对象的类名
System.out.println(classname);
输出结果:
java.util.GregorianCalendar
======================================================================
Calendar now = Calendar.getInstance(); //获取当前实例
int year = now.get(Calendar.YEAR);
System.out.println(year+"年");
int month = now.get(Calendar.MONTH);
System.out.println((month+1)+"月"); //month值0~11 要+1
int days = now.get(Calendar.DAY_OF_YEAR); //年的第几天
System.out.println("今年第:"+days+"天");
int weekdays = now.get(Calendar.DAY_OF_WEEK); //周的第几天DAY_OF_WEEK 1~7 从周日开始 要-1
System.out.println("本周第:"+weekdays+"天");
int hour = now.get(Calendar.HOUR);
System.out.println(hour+"时");
//month值0~11 要+1
int days = now.get(Calendar.DAY_OF_YEAR); //年的第几天
System.out.println("今年第:"+days+"天");
int weekdays = now.get(Calendar.DAY_OF_WEEK); //周的第几天DAY_OF_WEEK 1~7 从周日开始 要-1
System.out.println("本周第:"+weekdays+"天");
int hour = now.get(Calendar.HOUR);
System.out.println(hour+"时");
输出结果为:
时间分量的设置
方法调用:
. set(int field , int value)
无返回值void
参数列表(设置区域,值)
获取时间分量:
. getTime( );
无参,
返回Date类型的对象
/*
* 设置时间分量
* void set(int field,int value)
* field时间分量
* value值
*/
now.set(Calendar.YEAR,1988);
now.set(Calendar.MONTH,10); //11月写10 0~11
now.set(Calendar.DATE,28);
/*
* 将Calendar对象转换为Date对象
* getTime返回date
*/
Date date6 = now.getTime();
System.out.println(date6);
/*
* 将Date对象转换为Calendar时
* 创建Calendar
* 调用setTime(Date date)
*/
输出结果:
MONTH项,Leo填的10,实际上是November----11月
======================================================================
获取2018年每月最后一天的日期
Calendar cal = Calendar.getInstance(); //获取当前实例
for (int i = 0; i < 12; i++){
cal.set(Calendar.MONTH, i); //修改日历到每个月,i记得从0开始
int day = cal.getActualMaximum(Calendar.DATE); //获取每个月最大的天数,返回值int
System.out.println((i+1)+"月,有"+day+"天");
}
输出结果:1月有31天
2月有28天 【2018是平年,没毛病】
3月有。。。。。。。
4月。。。。。。。。
======================================================================
. add (int field , int amount )
Calendar nowOne = Calendar.getInstance();
nowOne.add(Calendar.DATE, 30);
System.out.println(nowOne.getTime());
本月基础上加30天,输出结果为: