Date类
简介
Date类是java.util包下的类,继承父类java.lang.Object,已实现的的接口有Serializable,Cloneable,Comparable<Date>,如下图
直接已知子类有Date,Time,Timestamp。类Date表示特定的瞬间,精确到毫秒。在 JDK 1.1 之前,类
Date
有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用Calendar
类实现日期和时间字段之间转换,使用DateFormat
类来格式化和解析日期字符串。Date
中的相应方法已废弃。
Date()类构造方法
Date()类中的构造方法好多都已过时,到现在只有两个构造方法还能使用,分别为:
Date()无参构造:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒);
Date(long date);有参构造:分配Date并初始化此对象,以表示自从标准基准时间(成为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数
以下是API中,Date有参,无参构造的定义
Date()类构造方法的简单实用
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/21 19:04
*/
public class DateTest {
public static void main(String[] args) {
//通过无参构造来创建对象
Date date = new Date();
System.out.println(date);
//调用getTime()方法显示当前时间距离1970-01-01 00:00:00的时间戳
long time = date.getTime();
System.out.println(time);
//通过有参构造来创建对象
Date date1 = new Date(time);
System.out.println(date1);
}
}
Date()类的常用方法
getTime public long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 setTime public void setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 参数:time - 毫秒数。
Date()类的常用方法的简单实用
//无参构造创建对象
Date date = new Date();
//调用getTime()方法显示当前时间距离1970-01-01 00:00:00的时间戳
System.out.println(date.getTime());
//输出1970年距今的年份
System.out.println(date.getTime()*1.0/1000/60/60/24/365+"年");
//long time = 1000*60*60;
//获取系统当前时间,单位是毫秒值
long time = System.currentTimeMillis();
date.setTime(time);
System.out.println(date);
SimpleDateFormat类
简介
simpleDateFormat继承DateFormat类,实现了Serializable,Cloneable接口;而DateFormat是日期/时间格式化子类的一个抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为
Date
对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。但是SimpleDateFormat是其直接子类,用它来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
日期和时间模式
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母
'A'
到'Z'
和'a'
到'z'
被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 ('
) 引起来,以免进行解释。"''"
表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
日期时间元素
字母 日期或时间元素 表示 示例 G
Era 标志符 Text AD
y
年 Year 1996
;96
M
年中的月份 Month July
;Jul
;07
w
年中的周数 Number 27
W
月份中的周数 Number 2
D
年中的天数 Number 189
d
月份中的天数 Number 10
F
月份中的星期 Number 2
E
星期中的天数 Text Tuesday
;Tue
a
Am/pm 标记 Text PM
H
一天中的小时数(0-23) Number 0
k
一天中的小时数(1-24) Number 24
K
am/pm 中的小时数(0-11) Number 0
h
am/pm 中的小时数(1-12) Number 12
m
小时中的分钟数 Number 30
s
分钟中的秒数 Number 55
S
毫秒数 Number 978
z
时区 General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
时区 RFC 822 time zone -0800
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
SimpleDateFormat常用构造方法
|
SimpleDateFormat格式化和解析日期
将日期格式化为日期、时间字符串
从给定字符串的开始解析文本以生成日期
SimpleDateFormat格式化和解析日期的简单实用
//日期格式化成日期/时间字符串
Date date = new Date();
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat();//无参构造
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format);
System.out.println("%%%%%%%%%%%%%%%%%%%%");
//定字符串的开始解析文本以生成日期
//已知日期字符串:"2015-10-20",将该日期字符串转换为日期对象
String str = "2015-10-20";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = simpleDateFormat1.parse(str);
System.out.println(date1);
calendar类
简介
calendar类直接继承java.lang.Object类,实现了Serializable,Cloneable,Comparable<Calendar>接口,其直接子类为GregorianCalendar;
Calendar类是一个抽象类,它为特定瞬间与一组诸如
YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。与其他语言环境敏感类一样,Calendar
提供了一个类方法getInstance
,以获得此类型的一个通用的对象。Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已由当前日期和时间初始化:Calendar calendar = Calendar.getInstance();Calendar
对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,
常用字段摘要
static int | DATE get 和 set 的字段数字,指示一个月中的某天。 |
static int | DAY_OF_MONTH get 和 set 的字段数字,指示一个月中的某天。 |
static int | DAY_OF_WEEK get 和 set 的字段数字,指示一个星期中的某天。 |
static int | DAY_OF_WEEK_IN_MONTH get 和 set 的字段数字,指示当前月中的第几个星期。 |
static int | DAY_OF_YEAR get 和 set 的字段数字,指示当前年中的天数。 |
static int | HOUR get 和 set 的字段数字,指示上午或下午的小时。 |
static int | HOUR_OF_DAY get 和 set 的字段数字,指示一天中的小时。 |
static int | MONTH 指示月份的 get 和 set 的字段数字。 |
static int | SECOND get 和 set 的字段数字,指示一分钟中的秒。 |
protected long | time 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。 |
static int | WEEK_OF_MONTH get 和 set 的字段数字,指示当前月中的星期数。 |
static int | WEEK_OF_YEAR get 和 set 的字段数字,指示当前年中的星期数。 |
static int | YEAR 指示年的 get 和 set 的字段数字。 |
构造方法
构造一个带有默认时区和语言环境的Calendar
构造一个带有指定时区和语言环境的Calendar
zone--要使用的时区
zLocale--用于星期数据的语言环境
常用方法
abstract void | add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
int | get(int field) 返回给定日历字段的值。 |
static Calendar | getInstance() 使用默认时区和语言环境获得一个日历。 |
Date | getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 |
void | set(int field, int value) 将给定的日历字段设置为给定值。 |
String | toString() 返回此日历的字符串表示形式。 |
Calendar方法练习
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/20 14:58
*/
public class Test0204 {
public static void main(String[] args) throws ParseException {
/**
* 通过键盘录入日期字符串,格式(2021-04-21)
* 如输入:2021-04-21,输出"2020年-04月-21日 是 星期二,是2021年的第 111 天"
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入日期字符串(格式为:年-月-日): ");
String str = scanner.nextLine();
/* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(str);*/
Date date = parseDate(str);
/*SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年-MM月-dd日");
String newDate = sdf1.format(date);
System.out.println(newDate);*/
//按格式输出日起对象
String s = formatDate(date);
//创建日历对象,将日期对象转换为日历对象
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK)+1;
//获取的星期
String weekDay = getWeek(dayWeek);
//获取的是该年的第多少天
int dayYear = calendar.get(Calendar.DAY_OF_YEAR);
//获取该年份
int year = calendar.get(Calendar.YEAR);
System.out.println(s+" 是 "+weekDay+",是"+year+"年的第 "+dayYear+" 天");
}
/**
* 解析字符串为日期对象
* @param string
* @return
*/
public static Date parseDate(String string){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = simpleDateFormat.parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 格式化字符串
* @param date
* @return
*/
public static String formatDate(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年-MM月-dd日");
String newDate = simpleDateFormat.format(date);
return newDate;
}
/**
* 获取星期几
* @param num
* @return
*/
public static String getWeek(int num){
String weekDay = null;
switch (num){
//如输入:2015-10-20,输出"2015年-10月-20日 是 星期二,是2015年的第 293 天"
case 1:
weekDay = "星期一";
break;
case 2:
weekDay = "星期二";
break;
case 3:
weekDay = "星期三";
break;
case 4:
weekDay = "星期四";
break;
case 5:
weekDay = "星期五";
break;
case 6:
weekDay = "星期六";
break;
case 7:
weekDay = "星期日";
break;
default:
System.out.println("获取日期有误!");
}
return weekDay;
}
}
时间,日期与日历之间的转换
当前时间转换为指定格式字符串
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/21 8:25
*/
public class 当前时间转换为指定格式 {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String newDate = sdf.format(date);
System.out.println(newDate);
}
}
日期与指定格式字符串的相互转换
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/21 8:27
*/
public class 日期与指定格式字符串的相互转换 {
public static void main(String[] args) {
//创建字符串日期
String str = "2021-04-21";
//创建日起对象并指定格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年-MM月-dd日");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
//按指定格式解析字符串为日期
Date newStr = sdf.parse(str);
//日期转换为指定格式字符串
String newDate = simpleDateFormat.format(newStr);
System.out.println(newDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
当前时间转换为日历
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/21 8:33
*/
public class 当前时间转换为日历 {
public static void main(String[] args) {
//获取当前日期
Date date = new Date();
//创建日历对象,Calendar是一个抽象类,不能实例化对象,可以用Calendar中的方法来获取日历对象
Calendar calendar = Calendar.getInstance();
//将日期转换为日历
calendar.setTime(date);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONTH)+1;
//获取日
int day = calendar.get(Calendar.DATE);
System.out.println(year+"年-"+month+"月-"+day+"日");
}
}
日历转换为日期
/**
* @Describe
* @Author Double LiFly
* @date 2021/4/21 8:33
*/
public class 当前时间转换为日历 {
public static void main(String[] args) {
//获取当前日期
Date date = new Date();
//创建日历对象,Calendar是一个抽象类,不能实例化对象,可以用Calendar中的方法来获取日历对象
Calendar calendar = Calendar.getInstance();
//将日期转换为日历
calendar.setTime(date);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONTH)+1;
//获取日
int day = calendar.get(Calendar.DATE);
System.out.println(year+"年-"+month+"月-"+day+"日");
}
}