关于JAVA学习_Date类
一、 Date类
Date类对象的创建:
1、创建一个当前时间的Date对象
//创建一个代表系统当前日期的Date对象
Date d = new Date();
2、创建一个我们指定的时间的Date对象:
使用带参数的构造方法Date(int year, int month, int day) ,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。
//创建一个代表2020年9月28号的Date对象
Date d1 = new Date(2020-1900, 9-1, 28); (注意参数的设置)
3、正确获得一个date对象所包含的信息
如:
Date d2 = new Date(2020-1900, 9-1, 28);
//获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)
int year = d2.getYear() + 1900;
//获得月份 (注意月份要加1,这样才是日期对象d2所代表的月份)
int month = d2.getMonth() + 1;
//获得日期
int date = d2.getDate();
//获得小时
int hour = d2.getHours();//不设置默认为0
//获得分钟
int minute = d2.getMinutes();
//获得秒
int second = d2.getSeconds();
//获得星期 (注意:0代表星期日、1代表星期1、2代表星期2,其他的一次类推了)
int day = d2.getDay();
二、Calendar类
Calendar类的功能要比Date类强大很多,可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题。而且在实现方式上也比Date类要复杂一些
1、Calendar类对象的创建
Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
2、创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
3、创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2014年5月9日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2014, 5 - 1, 9);//调用:public final void set(int year,int month,int date)
4、Calendar类对象信息的设置与获得
1)Calendar类对象信息的设置
A、Set设置
如:Calendar c1 = Calendar.getInstance();
调用:public final void set(int year,int month,int date)
c1.set(2020-1900, 9-1, 28);//把Calendar对象c1的年月日分别设这为:2020、9、28
B、利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用public void set(int field,int value)
//把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
//把c1对象代表的年份设置为2014年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2015);
其他字段属性set的意义以此类推
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段意义相同
Calendar.HOUR——12小时制的小时
Calendar.HOUR_OF_DAY——24小时制的小时
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几
1 package demo1; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 import java.util.Date; 6 7 public class TestDate { 8 9 public static void main(String[] args) { 10 11 //date:获取当前系统时间 12 Date date=new Date(); 13 System.out.println(date);//年-月-日 14 15 //SimpleDateFormat:对日期进行格式化 16 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 17 String date1=sdf.format(date); 18 System.out.println(date1); 19 20 21 Calendar c=Calendar.getInstance();//创建了一个日历对象 22 //设置 23 // c.set(2020, 9, 29, 9, 10, 21); 24 //获取年 25 int y=c.get(Calendar.YEAR); 26 //获取月 0-11 27 int month=c.get(Calendar.MONTH)+1; 28 //获取日 29 int day=c.get(Calendar.DAY_OF_MONTH); 30 //获取时 31 int h=c.get(Calendar.HOUR_OF_DAY); 32 //获取分 33 int m=c.get(Calendar.MINUTE); 34 //获取秒 35 int s=c.get(Calendar.SECOND); 36 System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s); 37 38 } 39 40 }
对日期进行格式化和巧妙计算方法运行时间,方便测试程序:
1 package demo1; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Calendar; 6 import java.util.Date; 7 8 public class TestDate { 9 10 public static void main(String[] args) throws ParseException { 11 12 //date:获取当前系统时间 13 Date date=new Date(); 14 System.out.println(date);//年-月-日 15 16 //SimpleDateFormat:对日期进行格式化 调用format方法 17 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 18 String date1=sdf.format(date); 19 System.out.println(date1); 20 21 22 Calendar c=Calendar.getInstance();//创建了一个日历对象 23 //设置 24 // c.set(2020, 9, 29, 9, 10, 21); 25 //获取年 26 int y=c.get(Calendar.YEAR); 27 //获取月 0-11 28 int month=c.get(Calendar.MONTH)+1; 29 //获取日 30 int day=c.get(Calendar.DAY_OF_MONTH); 31 //获取时 32 int h=c.get(Calendar.HOUR_OF_DAY); 33 //获取分 34 int m=c.get(Calendar.MINUTE); 35 //获取秒 36 int s=c.get(Calendar.SECOND); 37 System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s); 38 39 //日期字符串转换为Date类型 注意格式一致 java 40 String time="2020-10-8 15:40:15 333"; 41 SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); 42 Date time1 = sdf2.parse(time); 43 System.out.println(time1); 44 System.out.println("-------------------"); 45 //获取自1970年 1月1号到现在的总毫秒值 46 long nowTime = System.currentTimeMillis(); 47 System.out.println(nowTime); 48 49 long begin = System.currentTimeMillis(); 50 print(); 51 long end = System.currentTimeMillis(); 52 System.out.println("方法耗时"+(end-begin)+"毫秒"); 53 } 54 //需求:统计一个方法执行所需的毫秒值 55 public static void print(){ 56 for(int i=0;i<1000;i++){ 57 System.out.println("i="+i); 58 59 } 60 61 62 System.out.println("---------"); 63 //获取昨天此时的时间 64 Date time2 = new Date(System.currentTimeMillis()-1000*60*60*24); 65 SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); 66 String ye = sdf2.format(time2); 67 System.out.println("昨天的此时时间为"+ye); 68 } 69 70 71 72 }
C、Add设置(可用与计算时间)
Calendar c1 = Calendar.getInstance();
//把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
//把c1对象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推
2)、Calendar类对象信息的获得(使用get())
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;(MONTH+1)
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
三、 GregorianCalendar类
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
1、GregorianCalendar类对象的创建
GregorianCalendar有自己的构造方法,而其父类Calendar没有公开的构造方法。
GregorianCalendar() 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
2、创建一个代表当前日期的GregorianCalendar对象
GregorianCalendar gc = new GregorianCalendar();
//创建一个代表2014年6月19日的GregorianCalendar对象(注意参数设置,与其父类是一样,月份要减去1)
GregorianCalendar gc = new GregorianCalendar(2014,6-1,19);
3、另外:GregorianCalendar有一个方法:boolean isLeapYear(int year) 确定给定的年份是否为闰年
四、DateFormat类和SimpleDateFormat类
public class SimpleDateFormat extends DateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。(日期时间输出的工具类)
它允许进行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。所以SimpleDateFormat类可以实现:String 到 Date,Date到String的互转
五、日期类对象之间的互转
/* Date Long Calendar*/
Date类对象与long型时间的互转
//1.将Date类的对象转换为long型时间
Date d= new Date();
//使用对象的getTime()方法完成
long dLong = d.getTime();
//2.将long型时间转换为Date类的对象
long time = 1290876532190L;
//使用Date的构造方法完成
Date d2 = new Date(time);
Calendar对象和long型时间之间的互转
// 将Calendar对象转换为相对时间
Calendar c = Calendar.getInstance();
long t1 = c.getTimeInMillis();
// 将long转换为Calendar对象
Calendar c1 = Calendar.getInstance();
long t = 1252785271098L;
c1.setTimeInMillis(t1);
/* String Date Calendar 三者之间的相互转换*/
Calendar对象和Date对象之间的互转
//1 .将Calendar对象转换为Date(c.getTime())
Calendar c = Calendar.getInstance();
Date d = c.getTime();
// 2.将Date转换为Calendar对象(s.setTime(date))
Calendar c1 = Calendar.getInstance();
Date d1 = new Date();
//通过setTime()方法后,日历c1所表示的日期就d1的日期
c1.setTime(d1);
String Calendar之间的转换:
//1.Date 转化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
//2.String 转化Date
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date birthday = sdf.parse(str);
Date个Calendar对象之间的转换
//1.Date 转化为Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
//2.Calenda转换为Date
Calendar calendar = Calendar.getInstance();
Date date =calendar.getTime();
Date和String对象之间的转换
//1.Calendar 转化 String
Calendar calendat = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;
String dateStr = sdf.format(calendar.getTime());
//2.String 转化Calendar
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
六、利用以上各个类的功能,我们可以很简单的实现一些时间计算的功能,下面看几个方法:
l、判断是否是闰年
1 /**
2
3 * 给定一个年份判断该年份是否为闰年
4
5 */
6
7 public static boolean isLeapYear(int year) {
8
9 GregorianCalendar calendar = new GregorianCalendar();
10
11 return calendar.isLeapYear(year);
12
13 }
14
15
2、获取当前日期的字符串表示形式
1 /**
2
3 * 利用SimpleDateFormat获取当前日期的字符串表示形式 格式:2009-5-05
4
5 */
6
7 public static String getCurrentDate() {
8
9 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
10
11 return dateFormat.format(System.currentTimeMillis());
12
13 }
3、给出任意一个年月日得到该天是星期几
1 /**
2
3 * 给出任意一个年月日得到该天是星期几
4
5 */
6
7 public static int getWeek(String date) {
8
9 // 注意参数的大小写格式
10
11 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
12
13 Calendar c = Calendar.getInstance();
14
15 try {
16
17 Date d = dateFormat.parse(date);
18
19 c.setTime(d);
20
21 } catch (ParseException e) {
22
23 }
24
25 return c.get(Calendar.DAY_OF_WEEK)-1;
26
27 }
4、 获得今天n天以后或者n天以前是那一天
1 /**
2
3 * 获得距离今天n天的那一天的日期
4
5 */
6
7 public static String getDistanceDay(int day) {
8
9 Calendar calen = Calendar.getInstance();
10
11 calen.add(Calendar.DAY_OF_MONTH, day);
12
13 Date date = calen.getTime();
14
15 // 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的date
16
17 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
18
19 return dateFormat.format(date);
20
21 }
5、 获得距离指定日期n天的那一天的日期
1 /**
2
3 * 获得距离指定日期n天的那一天的日期
4
5 */
6
7 public static String getDistanceDay(String date, int day) {
8
9 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
10
11 Date d;
12
13 Calendar c =Calendar.getInstance();
14
15 try {
16
17 d = dateFormat.parse(date);
18
19 c.setTime(d);
20
21 c.add(Calendar.DATE, day);
22
23
24
25 } catch (ParseException e) {
26
27 e.printStackTrace();
28
29 }
30
31 return dateFormat.format(c.getTime());
32
33 }
6、获得给定两个日期相差的天数
1 /**
2
3 * 获得给定两个日期相差的天数
4
5 *
6
7 */
8
9 public static long getGapDays(String date1, String date2) {
10
11 String[] d1 = date1.split("-");
12
13 String[] d2 = date2.split("-");
14
15 Calendar c = Calendar.getInstance();
16
17 c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer
18
19 .parseInt(d1[2]), 0, 0, 0);
20
21 long l1 = c.getTimeInMillis();
22
23 c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer
24
25 .parseInt(d2[2]), 0, 0, 0);
26
27 long l2 = c.getTimeInMillis();
28
29 return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));
30
31 }
32
33
34 ]
https://www.cnblogs.com/gu-bin/p/10022703.html