Date类的使用
Date类
java.util.Date 日期类,类 Date 表示特定的瞬间,精确到毫秒。
构造方法
-
Date() ;默认系统时间
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
常用方法
-
1.long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
过时方法:
- int getYear()+1900 ;获取年份距今(),所以需加上1900才能获得当前年份
-
int getMonth() +1 ;获取月份 底层代码自然月-1 ,所以要想获得当前月份,需要+1
-
int getDay(); 星期几
-
int getDate();几号
-
int getHours();获取当天几时
-
int getMinutes();获取当天几分
-
int getSeconds();获取当前时间的毫秒值
-
String toLocaleString();将date的默认格式转成toLocaleString()格式,
过时2021-9-15 19:01:06
package JAVA_API.num7_Date;
import java.util.Date;
/**
*
* @author yyc
* 2021/9/15 18:49
*/
public class Test1_Date {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);//Wed Sep 15 18:50:49 CST 2021
/*
* 常用方法
* */
System.out.println(date.getTime());//获取的是从1970年1月1日0点0分0秒的毫秒值。1631703088070
System.out.println(date.getYear()+1900);//获取年份距今:2021
System.out.println(date.getMonth()+1);//获取月份 底层代码自然月-1 ,9
System.out.println(date.getDay());//星期几 3
System.out.println(date.getDate());//几号 15号
System.out.println(date.getHours());//获取当天几时
System.out.println(date.getMinutes());//获取当天几分
System.out.println(date.getSeconds());//获取当天几秒
//将date的默认格式转成toLocaleString()格式,过时
System.out.println(date.toLocaleString());//2021-9-15 19:01:06
}
}
SimpleDateFormat 日期格式化工具
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat 类构造方法
-
SimpleDateFormat()
用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 -
SimpleDateFomat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
通过SimpleDateFormat对象调用常用方法
两种类型的日期数据互转 String <-> Date
将String 格式的日期 转成 Date 格式
- Date parse(String str);将字符串解析成Date类型
- String format(Date date); 将Date对象格式的日期转成字符串
public static void method1() throws ParseException {
String str = "2021-9-19 15:47:24";
//创建SimpleDateFormat对象
//参数为日期的格式:y表示年,M表示月,d表示日,H表示时,m表示分,s 表示秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Date parse(String strdate);将字符串解析成Date类型
Date date = sdf.parse(str);
System.out.println(date);//Sun Sep 19 15:47:24 CST 2021
//String format(Date date);将Date对象格式转换成字符串表示的日期格式
String sdate = sdf.format(date);
System.out.println(sdate);//2021-09-19 15:47:24
}
/*
* 接收用户输入的出生日期:计算距今活了多少天
* */
public static void method2() throws Exception{
Scanner scan = new Scanner(System.in);
System.out.println("请输入日期(yyyy-MM-dd):");
//1.声明字符串对象接收用户控制台输出
String sdate = scan.nextLine();
//2.声明日期转换格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//3.使用SimpleDateFormat对象调用parse()方法将字符串类型的日期转换为Date类型的日期格式
Date nowdate = sdf.parse(sdate);
//4.获取用户出生日期的毫秒值,通过日期对象调用getTime()方法获取毫秒值。
long birth = nowdate.getTime();
//5.获取当前系统的毫秒值
long now = System.currentTimeMillis();
System.out.println((now - birth)/1000/60/60/24);
}
Calendar 日历类是抽象类
Calendar 类是抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar类的子类对象,该子类对象是根据当前默认的时区和语言环境取来的
常用方法
-
1.int get(int field);返回给定日历字段的值
-
2.void set(int field,int value);将指定字段设置为指定的值
-
void set(int year, int month, int date)
-
void set(int year, int month, int date, int hourOfDay, int minute);
-
3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定
Date 与 Calendar 之间的相互转换。
-
4.Date getTime();返回一个表示此Calendar时间值的Date对象
-
5.void setTime(Date date); 用当前的Calendar表示给定的Date
package JAVA_API.num7_Date;
import java.util.Calendar;
import java.util.Date;
/**
* java.util.Calendar 日历类,在Date后出现,替换掉了许多Date类的 方法,
* 该类将所有可能使用到的时间日期都封装为静态成员变量。方便获取
* Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等
* 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
* @author yyc
* 2021/9/15 20:12
*/
public class Test3_Calendar {
public static void main(String[] args) {
method1();
}
public static void method1(){
/*
* Calendar 类是抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar类的子类对象,
* 该子类对象是根据当前默认的时区和语言环境取来的
* ---GregorianCalendar 阳历
* */
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
/*
* 1.int get(int field);返回给定日历字段的值
* 2.void set(int field,int value);将指定字段设置为指定的值
* void set(int year, int month, int date)
* void set(int year, int month, int date, int hourOfDay, int minute);
* 3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定
* 4.Date 与 Calendar 之间的相互转换。
* Date getTime();返回一个表示此Calendar时间值的Date对象
* 5.void setTime(Date date); 用当前的Calendar表示给定的Date
* */
//1.int get(int field);返回给定日历字段的值
int year = calendar.get(Calendar.YEAR);
System.out.println(year);//2021
int month = calendar.get(Calendar.MONTH);//获取当前月得自然月+1
System.out.println(month + 1);
int day = calendar.get(Calendar.DAY_OF_MONTH);//获取本月第几天
System.out.println(day);
//2.void set(int field,int value);将指定字段设置为指定的值
calendar.set(Calendar.YEAR,2030);
calendar.set(Calendar.MONTH,15);
System.out.println(calendar.get(Calendar.MONTH));//3,如果设置的数超过常规值,会自动进入下一轮
calendar.set(Calendar.DATE,33);
System.out.println(calendar.get(Calendar.DATE));//3,如果设置的数超过了本月月份的常规值,会自动进入下一轮
calendar.set(1999,1,1);
System.out.println(calendar.get(Calendar.YEAR));//1999
System.out.println(calendar.get(Calendar.MONTH));//1
System.out.println(calendar.get(Calendar.DATE));//1
//3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定
calendar.add(Calendar.YEAR,20);
calendar.add(Calendar.MONTH,-10);
calendar.add(Calendar.DAY_OF_MONTH,15);
System.out.println(calendar.get(Calendar.YEAR));//1999+20 = 2018
System.out.println(calendar.get(Calendar.MONTH));//月份倒推10 等于 3
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 1 + 15 = 16
//Date 与 Calendar 之间的相互转换
//Date getTime();返回一个表示此Calendar时间值的Date对象
Date date = calendar.getTime();
System.out.println(date);//Mon Apr 16 20:55:08 CST 2018
//void setTime(Date date); 用当前的Calendar表示给定的Date
calendar.setTime(date);
System.out.println(calendar);
}
}
判断平闰年
package JAVA_API.num7_Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
/**
* 题:接收用户从控制台输入的日期,判断这一年是否为闰年,这个月有多少天,这一天是星期几?
* @author yyc
* 2021/9/15 19:46
*/
public class CommonOrLeapYear {
public static void main(String[] args)throws Exception {
method();
}
public static void method() throws Exception{
Scanner scan = new Scanner(System.in);
//1.提示用户输入日期
System.out.println("请输入日期:");
String sdate = scan.nextLine();
//2.声明日期转换格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//3.通过SimpleDateFormat对象 调用方法将字符串日期格式转换为Date对象
Date date = sdf.parse(sdate);
Calendar calendar = Calendar.getInstance();
//5.将Date转为calendar
calendar.setTime(date);
//6.获取年份
int year = calendar.get(Calendar.YEAR);
//判断平闰年
//需要用到子类的特有方法,需要向下造型
GregorianCalendar gc = (GregorianCalendar)calendar;
if (gc.isLeapYear(year)){
System.out.println(year + "是闰年");
}else{
System.out.println("是平年");
}
//getActualMaximum (int field);获取该月有多少天
int day = calendar.getActualMaximum(Calendar.DATE);
System.out.println("这个月有 : "+ day + "天");
//获取这一天是这一周的第几天
int c = calendar.get(Calendar.DAY_OF_WEEK);
if (c == 0){
System.out.println("这一天是星期天");
}else{
System.out.println("这一天是这周的第 " + c + "天");
}
}
}