Java在手,世界我有!!!Java中日期时间类——Date类、DateFormat类(SimpleDateFormat子类)与Calendar类
Date类 |
概述
java.util.Date是
表示日期和时间的类。 Date
类表示特定的瞬间(一个时间点,一刹那时间),精确到毫秒,(1000毫秒=1秒)。毫秒值的可以对时间和日期进行计算。还要清楚一个概念:时间原点。
时间原点(0毫秒)指的是1970年1月1日 00:00:00,这是英国格林威治的时间,需要注意,中国属于东八区,会把时间增加8个小时,也就是: 1970年1月1日 08:00:00。
把毫秒转换为日期:毫秒数/86400000 =天数。
1天 = 24 × 60 × 60 =86400 秒 =86400 × 1000 =86400000 毫秒、
Date类的常用构造方法
(1)Date
类的空参数构造方法:Data()
获取的就是当前系统的日期和时间
(2)Date
类的带参数构造方法:Date(long date)
:传递毫秒值,把毫秒值转换为Date
日期
代码举例
import java.util.Date;
public class Demo02Date {
public static void main(String[] args) {
//(1)Date类的空参数构造方法:Data()获取的就是当前系统的日期和时间
Date date=new Date();
System.out.println(date); //Sat Aug 22 16:17:15 CST 2020
//(2)Date类的带参数构造方法:Date(long date) :传递毫秒值,把毫秒值转换为Date日期
Date date1=new Date(0L);
System.out.println(date1); //Thu Jan 01 08:00:00 CST 1970
//(2)Date类的带参数构造方法:Date(long date) :传递毫秒值,把毫秒值转换为Date日期
Date date2=new Date(15811111111L);
System.out.println(date2); //Fri Jul 03 07:58:31 CST 1970
}
}
Date类的常用成员方法
long getTime()
:把日期转换为毫秒(相当于System.currentTimeMillis())
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date
对象表示的毫秒数。
代码举例
public class Demo02Date {
public static void main(String[] args) {
Date date3=new Date();
long time=date2.getTime(); //15811111111
System.out.println(time); //15811111111
}
}
DateFormat类 |
概述
java.text.DateFormat
是日期/时间【格式化】子类的抽象类。
作用有两个: 格式化(日期 -> 文本)、解析(文本-> 日期)
注意:SimpleDateFormat
类是一个抽象类,继承于(extends
) DateFormat
类。
SimpleDateFormat类的常用构造方法
SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构SimpleDateForma。
参数:
String pattern
:传递指定的模式模式:区分大小写的
y 年
M 月
d 日
H 时
m 分
s 秒
例如:"yyyy-MM-dd HH:mm:ss"
或者"yyyy年MM月dd日 HH时mm分ss秒"
。【注意】模式中的字符不能更改,连接模式的符号可以改变
DateFormat类的常用成员方法
【1】String format(Date date)
:按照指定的模式,将一个Date
格式化为符合模式的日期/时间字符串。
【使用步骤】
①创建SimpleDateFormat
对象,构造方法中传递指定的模式
②调用SimpleDateFormat
中的format
方法,按照构造方法中指定的模式,将Date
日期格式转化为符合模式的字符串(文本)
代码举例
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo03Format {
public static void main(String[] args) {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date=new Date();
//2.调用SimpleDateFormat中的format方法,按照构造方法中指定的模式,将Date日期格式转化为符合模式的字符串(文本)
String str=sdf.format(date);
System.out.println(date); //2020年08月22日 17时30分01秒
System.out.println(str);
}
}
【2】Date parse(String source)
:把符合模式的字符串,解析为Date
日期
注意:DateFormat
类是一个抽象类,无法直接创建对象使用,可以使用DateFormat
的子类SimpleDateFormat
【使用步骤】
①创建SimpleDateFormat
对象,构造方法中传递指定的模式
②调用SimpleDateFormat
对象中的方法parse
,把符合构造方法中模式的字符串,解析为日期
【注意】public Date parse(String source) throws ParseException``
parse方法声明了一个异常叫ParseException
解析异常,如果参数字符串和构造方法中的模式不一样,那么程序就会抛出此异常。调用一个抛出了异常的方法,就必须的处理这个异常,要么throws
继续声明抛出这一个异常,要么try...catch
自己处理这个异常。
代码举例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo04Parse {
public static void main(String[] args) throws ParseException {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为日期
Date date=sdf.parse("2020年08月22日 17时30分01秒");
System.out.println(date); //Sat Aug 22 17:30:01 CST 2020
}
}
日期相关API小练习
问题描述:请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
1.获取当前时间对应的毫秒值
2.使用Scanner类中的方法next获取自己出生日期
3.使用DateFormat类中的方法parse,把字符串的出生日期解析为Date格式
4.把Date格式的出生日期转换为毫秒值
5.使用当前日期的毫秒值-出生日期的毫秒值
6.把毫秒值的差值转换为天(s/1000/60/60/24)
代码实现
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Demo05DateExer {
public static void main(String[] args) throws ParseException {
// 2.使用Scanner类中的方法next获取自己出生日期
System.out.println("请输入出生日期,格式为:yyyy-MM-dd");
Scanner scan=new Scanner(System.in);
String str=scan.next();
// 3.使用DateFormat类中的方法parse,把字符串的出生日期解析为Date格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date birthDate=sdf.parse(str);
// 4.把Date格式的出生日期转换为毫秒值
Long birth=birthDate.getTime();
// 1.获取当前时间对应的毫秒值
//long current=new Date().getTime();
Long current=System.currentTimeMillis();
// 5.使用当前日期的毫秒值-出生日期的毫秒值
Long s=current-birth;
// 6.把毫秒值的差值转换为天(s/1000/60/60/24)
System.out.println(s/1000/60/60/24);
}
}
Calendar类 |
概述
java.util.Calendar
类是一个日历类。Calendar
类是一个抽象类,为操作日历字段(YEAR、MONTH、DAY_OF_MONTH、HOUR 等)提供了一些方法。Calendar
类无法直接创建对象使用,里面有一个静态方法叫做getInstance()
,该方法返回了Calendar
类的子类对象。
Calendar rightNow = Calendar.getInstance();
Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
Calendar类的常用成员方法
【1】-public int get(int field)``:返回给定日历字段的值。
参数:int field,传递指定的日历字段(Year,Month…)
返回值:日历字段代表的具体的值
代码举例
import java.util.Calendar;
public class Demo02Calendar {
public static void main(String[] args) {
//使用getInstance方法获取Calendar对象
Calendar c=Calendar.getInstance();
//获取年份
int year=c.get(Calendar.YEAR);
System.out.println(year); //2020
//获取月份
int month=c.get(Calendar.MONTH);
System.out.println(month+1); //西方的月份0-11,东方的月份1-12 8
//获取日
//int date=c.get(Calendar.DATE); //22
int date=c.get(Calendar.DAY_OF_MONTH); //22
System.out.println(date);
}
}
【2】-public void set(int field, int value)``:将给定的日历字段设置为给定值。、
参数:
int field:传递指定的日历字段(Year,Month…)
int value:传递的字段设置的具体值
代码举例
import java.util.Calendar;
public class Demo03CalendarSet {
public static void main(String[] args) {
//使用getInstance方法获取Calendar对象
Calendar c=Calendar.getInstance();
//设置年为9999
c.set(Calendar.YEAR,9999);
//设置月为9
c.set(Calendar.MONTH,9);
//设置日为9
c.set(Calendar.DATE,9);
//同时设置年月日,可以使用set的重载方法
c.set(8888,8,8);
}
}
【3】-public abstract void add(int field, int amount)``:根据日历的规则,为给定的日历字段添加或减去指定的时间量。
参数:
int field:传递指定的日历字段(Year,Month…)
int amount:增加/减少的值
正数:增加
负数:减少
代码举例
import java.util.Calendar;
public class Demo04CalendarAdd {
public static void main(String[] args) {
//使用getInstance方法获取Calendar对象
Calendar c=Calendar.getInstance();
//把年增加2年
c.add(Calendar.YEAR,2);
//把月减少3个月
c.add(Calendar.MONTH,-2);
}
}
【4】-public Date getTime()``:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
代码举例
import java.util.Calendar;
import java.util.Date;
public class Demo05CalendarGeTime {
public static void main(String[] args) {
//使用getInstance方法获取Calendar对象
Calendar c=Calendar.getInstance();
Date date=c.getTime();
System.out.println(date); //Sat Aug 22 21:00:31 CST 2020
}
}