一、Date类
为什么要使用Date类?
String date1 = "2020-10-18";
String date2 = "2020-10-28";
//date2 - date1 不行。
//所以我们要学习Date类。
Date
类表示特定的瞬间,精确到毫秒。
它允许把日期解释为年、月、日、时、分和秒值。
年:正常年份值
月: 0 至 11 整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
日:1 至 31 表示。(一月中的某天)。
时:0至23
分:0至59
秒:0至59
周:0至6 0周日
毫秒值的概念和作用(了解-扩展)
1秒=1000毫秒
1 天 = 24 × 60 × 60 = 86400 秒 = 86400 * 1000 = 86400000毫秒
--------------------------------------------------------------
时间原点:0毫秒的时间点
1970 年 1 月 1 日 00:00:00 英国格林威治的时间(世界标准时间)
中国:东八区 标准时间+8个小时的时差
1970 年 1 月 1 日 08:00:00
把当前日期和时间转换为毫秒值:就是当前时间和时间原点的一个差值
当前时间(2020年8月10日 11:21:33)-时间原点(1970 年 1 月 1 日 00:00:00) = 1597029762998
Date类的构造方法和成员方法
构造方法摘要 | 说明 |
---|---|
Date() | 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 |
Date(long date) | 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 |
long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
代码示例
import java.util.Date;
/*
Date类:是一个日期类
构造方法:
Date();
Date(long l);
long getTime(); 得到1970-1-1 00:00:00 到当前系统时间的时间毫秒值
*/
public class TestDate {
public static void main(String[] args) {
method2();
}
/*
long getTime(); 得到1970-1-1 00:00:00 到当前系统时间的时间毫秒值
*/
private static void method3() {
Date date = new Date();
System.out.println(date.getTime()); //1602990270976
}
/*
Date(long l); 有参构造 参数是毫秒值
CST: 中国标准时间
*/
public static void method2(){
//创建Date日期对象
Date date = new Date(1602990270976L);
System.out.println(date); //Sun Oct 18 10:59:40 CST 2020
}
/*
Date(); 无参构造
CST: 中国标准时间
*/
public static void method1(){
//创建Date日期对象
Date date = new Date();
System.out.println(date); //Sun Oct 18 10:59:40 CST 2020
}
}
二、DateFormat
1.DateFormat类介绍(了解)
DateFormat作用:
-
格式化(也就是日期 -> 文本)
-
解析(文本-> 日期)
方法 | 说明 |
---|---|
String format(Date date) | 参数传递Date日期,把日期格式化为符合模式的字符串 |
Date parse(String source) | 参数传递字符串,把符合模式的字符串解析为Date日期 |
DateFormat类本身还是一个抽象类,无法直接创建对象使用,需要使用DateFormat类的子类创建对象使用
java.text.SimpleDateFormat extends DateFormat类
SimpleDateFormat类的构造方法:
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
参数:
String pattern:传递日期和时间的模式
在模式中写y代表年
在模式中写M代表月
在模式中写d代表日
在模式中写H代表时
在模式中写m代表分
在模式中写s代表秒
"yyyy-MM-dd HH:mm:ss" "2020-08-10 11:56:03"
"yyyy年MM月dd日 HH时mm分ss秒"
"yyyy/MM/dd HH:mm:ss"
注意:
1.表示模式的字母不能随便写(y代表年,M代表月...),表示年月日时分秒的连接符号可以随意写(-,/...)
2.表示模式的字母严格区分大小写
2.SimpleDateFormat类的常用方法
代码示例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
DateFormat类:它是一个抽象类。不能new
String format(Date date) 将日期转成字符串格式。
Date parse(String source) 将字符串转成日期格式。
SimpleDateFormat是DateFormat的子类。
*/
public class TestDateFormat {
public static void main(String[] args) throws ParseException {
method2();
}
/*
Date parse(String source) 将字符串转成日期格式。
*/
public static void method2() throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.print("请输入日期(yyyy-MM-dd):");
String d = sc.next(); // 2020-10-18
//创建SimpleDateFormat对象,把字符串转换为日期类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(d);
System.out.println(date); //Sun Oct 18 00:00:00 CST 2020
}
/*
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
new SimpleDateFormat(pattern);
参数:
String pattern:传递日期和时间的模式
在模式中写y代表年
在模式中写M代表月
在模式中写d代表日
在模式中写H代表时
在模式中写m代表分
在模式中写s代表秒
*/
public static void method1(){
//创建日期对象
Date date = new Date();
System.out.println(date);
//使用SimpleDateFormat对象,把日期转换为字符串格式输出
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
String d = sdf.format(date);// 将日期转成字符串格式。
System.out.println(d); //2020年10月18日 11:20:21
}
}
三、Calendar类
1.Calendar类介绍&创建对象的方式
-
概述:
Calendar
类是一个抽象类,它为特定瞬间与一组诸如YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等日历字段
之间的转换提供了一些方法。 -
创建对象:
//对象表示的是系统当前时间 Calendar c = Calendar.getInstance();
示例:
import java.util.Calendar; public class TestCalender { public static void main(String[] args) { //创建日历对象 Calendar c = Calendar.getInstance(); System.out.println(c); } }
输出结果:
java.util.GregorianCalendar[time=1603003120822,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=2020,MONTH=9,WEEK_OF_YEAR=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=18,DAY_OF_YEAR=292,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=38,SECOND=40,MILLISECOND=822,ZONE_OFFSET=28800000,DST_OFFSET=0]
-
常用方法:
方法 | 说明 |
---|---|
int get(int field) | 获取某个字段的值 |
void set(int field,int value) | 设置某个字段的值 |
void add(int field,int amount) | 偏移某个字段的值(在原有的基础上加减) |
2.Calendar类中的常用成员方法
/*
Calendar类中的常用成员方法(重点)
int get(int field) 获取指定日历字段的值
void set(int field, int value) 将给定的日历字段设置为给定值
void add(int field, int amount) 把指定的日历字段,增加|减少指定的值
以上这些方法的参数(int field),传递指定的日历字段,这些字段在Calendar类中被定义为了常量
年:public final static int YEAR = 1;
月:public final static int MONTH = 2;
日:public final static int DATE = 5;
日:public final static int DAY_OF_MONTH = 5;
时:public final static int HOUR = 10;
分:public final static int MINUTE = 12;
秒:public final static int SECOND = 13;
星期:public final static int DAY_OF_WEEK = 7;
*/
import java.util.Calendar;
public class TestCalender {
public static void main(String[] args) {
show4();
}
//void add(int field,int amount) 在原有的基础上加/减
private static void show4() {
Calendar c = Calendar.getInstance();
//处理年
c.add(Calendar.YEAR,-1);
//处理月份
c.add(Calendar.MONTH,2);
//处理日
c.add(Calendar.DATE,25);
//得到年
int year = c.get(Calendar.YEAR);
System.out.println(year+"年");
//得到月
int month = c.get(Calendar .MONTH);
System.out.println((month+1)+"月");
//得到日
int date = c.get(Calendar.DATE);
System.out.println(date+"日");
}
//void set(int field,int value)设置某个字段的值
private static void show3() {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,8888);
c.set(Calendar.MONTH,11);
c.set(Calendar.DATE,35);
System.out.println(c.get(Calendar.YEAR)+"年");
System.out.println((c.get(Calendar.MONTH)+1)+"月");
System.out.println(c.get(Calendar.DATE)+"日");
}
//get方法获取日历字段的数据
/*
get方法的参数:
public final static int YEAR = 1; 年
public final static int MONTH = 2; 月
public final static int DATE = 5; 日
public final static int DAY_OF_MONTH = 5;
public final static int DAY_OF_WEEK = 7; 星期 0~6
public final static int DAY_OF_WEEK_IN_MONTH = 8; 本月的第几周
public final static int HOUR = 10;
public final static int MINUTE = 12;
public final static int SECOND = 13;
*/
private static void show2() {
//创建日历对象
Calendar c = Calendar.getInstance();
//得到年
int year = c.get(Calendar.YEAR);
System.out.println(year+"年");
//得到月
int month = c.get(Calendar .MONTH);
System.out.println((month+1)+"月");
//得到日
int date = c.get(Calendar.DATE);
System.out.println(date+"日");
//得到时分秒
//System.out.println(c.get(Calendar.HOUR)+"时"+c.get(Calendar.MINUTE)+"分"+c.get(Calendar.SECOND)+"秒");
System.out.println(c.get(Calendar.HOUR_OF_DAY)+"时"+c.get(Calendar.MINUTE)+"分"+c.get(Calendar.SECOND)+"秒");
System.out.println("星期:"+(c.get(Calendar.DAY_OF_WEEK)-1));
System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
}
//创建日历对象
public static void show1(){
//创建日历对象
Calendar c = Calendar.getInstance();
System.out.println(c);
}
}