一、Date类
1. 概述
Date类:表示特定的瞬间,精确到毫秒。
2.Date类的构造方法
2.1 public Date();
官方讲解:public Date():分配Date对象并初始化对象,以表示分配它的时间(精确到毫秒)
通俗的讲:public Date():分配Date对象并初始化对象,用来获取当前环境的时间,精确到毫秒。
public class Demo_01 {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1);
}
}
输出结果如下:
2.2 public Date (long date);
官方讲解:public Date (long date):分配Date对象并初始化此对象,以表示自从标准基准时间。
通俗的讲:public Date (long date):分配Date对象并初始化此对象,date变量用来存储毫秒数,用来计算从1970年1月1日00:00:00 开始经过date毫秒后是什么时间。
public class Demo_01 {
public static void main(String[] args) {
Date date2 = new Date(215464654);
System.out.println(date2);
}
}
输出结果如下:
3. Date类的常用方法
gettime():用来获取自 1970 年 1 月 1 日 00:00:00 GMT 开始到当前时间的毫秒数(时间戳)
public class Demo_01 {
public static void main(String[] args) {
Date date1 = new Date();
long time = date1.getTime();
System.out.println(time);
}
}
输出结果如下:
二、SimpleDateFormat类
1.概述
官方讲解:SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
通俗的说:SimpleDateForma类就是用来实现字符串和日期之间的相互转换。
2.日期和时间模式
字母 | 日期或时间元素 | 表示 | 示例 |
| Era 标志符 | Text |
|
| 年 | Year |
|
| 年中的月份 | Month |
|
| 年中的周数 | Number |
|
| 月份中的周数 | Number |
|
| 年中的天数 | Number |
|
| 月份中的天数 | Number |
|
| 月份中的星期 | Number |
|
| 星期中的天数 | Text |
|
| Am/pm 标记 | Text |
|
| 一天中的小时数(0-23) | Number |
|
| 一天中的小时数(1-24) | Number |
|
| am/pm 中的小时数(0-11) | Number |
|
| am/pm 中的小时数(1-12) | Number |
|
| 小时中的分钟数 | Number |
|
| 分钟中的秒数 | Number |
|
| 毫秒数 | Number |
|
| 时区 | General time zone |
|
| 时区 | RFC 822 time zone |
|
3. SimpleDateFormat类中的常用方法
3.1 format():把日期转换成指定格式的字符串
public class Demo_02 {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = new Date();
String format = sdf.format(date1);
System.out.println(format);
}
}
输出结果如下:
3.2 parse():把指定格式的字符串转换成日期
补充:parse()方法不能直接使用,需要处理异常才能使用。
public class Demo_02 {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = "1998-09-21 8:20:38";
try {
Date date2 = sdf.parse(time);
System.out.println(date2);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
输出结果如下所示:
三、 Calendar类
1. 概述
官方讲解:Calendar
类是一个抽象类,它为特定瞬间。Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。
通俗的讲:Calendar 类是一个抽象类,可以通过Calendar 的getInstance() 方法返回一个Calendar对象。
2. 常用字段摘要
DATE | 表示一个月中的某一天 |
DAY_OF_MONTH | 表示一个月中的某一天 |
DAY_OF_WEEK | 表示一个星期的某一天 |
DAY_OF_WEEK_IN_MONTH | 表示当前月中的第几个星期 |
DAY_OF_YEAR | 表示当前年的天数 |
AM | 表示上午(午夜到中午之间的时间) |
AM_PM | 指定上午或下午(指示HOUR是在中午之前还是中午之后) |
PM | 表示下午(中午到午夜之间的时间) |
HOUR | 表示上午或下午的时间(结尾需要使用AM_PM来指示上午或下午的时间) |
HOUR_OF_DAY | 表示一天中的小时 |
MILLISECOND | 表示一秒钟的毫秒 |
MINUTE | 表示一小时中的分钟 |
MONTH | 表示月份 |
SECOND | 表示秒数 |
WEEK_OF_MONTH | 表示当前月中的星期数 |
WEEK_OF_YEAR | 表示当前年中的星期数 |
YEAR | 表示年 |
3. Calendar类的常用方法
3.1 getTime();
getTime():用来获取当前系统的时间
public class Demo_03 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date1 = calendar.getTime();
System.out.println("当前时间为:"+date1);
}
}
输出结果如下:
3.2 get();
get()方法用来获取指定字段的值。
public class Demo_03 {
public static void main(String[] args) {
//get方法可以根据 指定的日历字段 获取时间对应的值
//calendar.get(Calendar.YEAR) 获取 年
int year = calendar.get(Calendar.YEAR);
System.out.println("年份:"+year);
//calendar.get(Calendar.MONTH) 获取 月份
int month = calendar.get(Calendar.MONTH);//从0开始 11结尾 所以月份得加1
System.out.println("月份:"+(month+1));
//calendar.get(Calendar.DAY_OF_MONTH); 获取在月份中的天数(日)
int date = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("一个月中的第:"+date+"天");
//calendar.get(Calendar.DAY_OF_YEAR); 获取在本年中的第几天
int day_of_Year = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("一年中的第:"+day_of_Year+"天");
}
}
输出结果如下:
3.3 set();
set()方法用来给某个字段赋值。
public class Demo_03 {
public static void main(String[] args) {
//可以获取 指定时间 月份0-11 表示 1-12月
// second:61 可以自动根据时间转换进一位
calendar.set(2000,9,28,15,46,61);
Date date2 = calendar.getTime();
System.out.println(date2);
}
}
输出结果如下:
3.4 getTimeInMillis();
getTimeInMillis()方法返回从历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)至现在所经过的毫秒数。
public class Demo_03 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
long timeInMillis = calendar.getTimeInMillis();
System.out.println("当前时间的毫秒值:"+timeInMillis);
}
}
输出结果如下:
3.5 getTimeZone();
getTimeZone()方法用来获取时区。
public class Demo_03 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
TimeZone timeZone = calendar.getTimeZone();
System.out.println("所在时区:"+timeZone);
}
}
输出结果如下:
四、 扩展练题
题目:用户按照格式输入出生年月日 时分秒 计算他几岁了?
实现代码如下:
package com.hp.Test09;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* 拓展作业: 用户按照格式输入出生年月日 时分秒 计算他几岁了?
*/
public class Demo_04 {
public static void main(String[] args) {
//提示用户需要输入的出生日期格式
System.out.println("请根据----年--月--日--时--分--秒 的格式来输入你的出生日期");
//实现键盘录入
Scanner scanner = new Scanner(System.in);
String dateTime=scanner.next();
//使用SimpleDateFormat类把用户输入的出生日期字符串转换为日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
try {
//把键盘录入的出生日期字符串转换为日期对象
Date born = sdf.parse(dateTime);
//获取当前时间
Date current_Time = new Date();
//把录入日前转换为毫秒数
long new_born = born.getTime();
//把当前日期转换为毫秒数
long new_Current_Time = current_Time.getTime();
//求出年龄毫秒数
long years = new_Current_Time - new_born;
int new_years = (int) (years / 1000 / 60 / 60 / 24 / 365);
System.out.println("你今年"+new_years+"岁了,已经是成年人了。");
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
输出结果如下: