日期时间
生活中相关的时间
世界标准时间:格林尼治、格林威治(Greenwich Mean Time)简称GMT。
中国的标准时间:世界标准时间+8小时(北京时间,中国位于东八区)
时间单位换算公式:
1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
计算机中的时间原点
计算机中的起始时间:1970年1月1日 00:00:00(C语言的诞生时间,Java沿用)
Date日期类
Date代表了一个特定的时间,精确到毫秒
构造方法
Date类的两个构造方法
方法名 | 说明 |
---|---|
public Date() {} | 表示默认时间 |
public Date(long date) {} | 指定时间 |
有参构造:把从时间原点开始,过了指定毫秒的时时间,封装成一个Date对象,需要考虑时差的问题。
package com.test3.test30;
import java.util.Date;
public class DateDemo01 {
public static void main(String[] args) {
/**
* 当前时间
*/
Date date1 = new Date();
System.out.println(date1);//Sun Nov 14 16:52:29 CST 2021
/**
* 中国是在东八区,所有要在标准时间的基础上加8小时
* 世界标准时间上过了0毫秒
*/
Date date2 = new Date(0L);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
/**
* 在时间原点的基础上过了指定毫秒的时间节点
*/
Date date3 = new Date(System.currentTimeMillis());
System.out.println(date3);//Sun Nov 14 16:58:05 CST 2021
}
}
成员方法
方法名 | 说明 |
---|---|
public void setTime(long time) {} | 设置时间,传递毫秒值 |
public long getTime() {} | 获取时间对象的毫秒值 |
package com.test3.test30;
import java.util.Date;
public class DateDemo02 {
/**
* 设置时间,传递毫秒值
*/
private static void setTime() {
Date date2 = new Date();
date2.setTime(0L);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
}
/**
* 获取时间对象的毫秒值
*/
private static void getTime() {
Date date1 = new Date();
long time1 = date1.getTime();
System.out.println(time1);//1636881019418 当前时间的毫秒值
System.out.println(System.currentTimeMillis());//1636881019418
}
}
SimpleDateFormat类
SimpleDateFormat可以对Date对象进行格式化和解析
格式化:
Date对象-------------------------------> 2021年11月14日 00:00:00
解析:
2021年11月14日 00:00:00---------------->Date对象
字母 | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时(0-23) |
h | 时(1-12) |
m | 分 |
s | 秒 |
举例:
2021-11-14 17:23:11 ----------------------> yyyy-MM-dd HH:mm:ss
2021年11月14日 17:23:11 -------------------> yyyy年MM月dd日 HH:mm:ss
构造方法
方法名 | 说明 |
---|---|
public SimpleDateFormat() {} | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) {} | 构造一个SimpleDateFormat,使用指定格式 |
成员方法
方法名 | 说明 | 备注 |
---|---|---|
public final String format(Date date) {} | 将日期格式转为日期/时间字符串 | 格式化(从Date到String) |
public Date parse(String source){} | 从给定字符串的开始解析文本以生成日期 | 解析(从String到Date) |
日期格式化工具类
日期格式与指定格式字符串之间的相互转换
package com.test3.test30;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatUtil {
/**
* 将日期类从Sun Nov 14 17:45:24 CST 2021
* 格式化为2021-11-14 17:40:52
*
* @param date
* @return
*/
private static String format1(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result = sdf.format(date);//2021-11-14 17:40:52
return result;
}
/**
* 将日期类从Sun Nov 14 17:45:24 CST 2021
* 格式化为2021年11月14日 17:42:29
* 24小时制
*
* @param date
* @return
*/
private static String format2(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String result = sdf.format(date);//2021年11月14日 17:42:29
return result;
}
/**
* 将日期类从Sun Nov 14 17:45:24 CST 2021
* 格式化为2021年11月14日 17:42:29
* 12小时制
*
* @param date
* @return
*/
private static String format3(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String result = sdf.format(date);//2021-11-14 05:43:25
return result;
}
}
解析工具类
pattern中的格式必须与要解析的字符串日期格式完全保持一致!!!
否则会报错:
Exception in thread "main" java.text.ParseException: Unparseable date: "2021-11-14"
package com.test3.test30;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PareseUtil{
/**
* 将字符串格式的时间解析为日期对象
*
* @param dateStr 要解析的日期字符串
* @return
* @throws ParseException
*/
private static Date parseStrToDate(String dateStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(dateStr);
}
}