4.Date
1.Date类
1.1 概念
-
java.sql.Date
是java.util.Date
的一个子类,主要用于和 SQL 数据库中的DATE
类型进行交互。它将日期信息存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,但只保留日期部分(年、月、日),会忽略时间部分(时、分、秒)。 -
Date 类表示日期和时间(该类大部分方法已过时),提供操纵日期和时间各组成部分的方法,Date 类的最佳应用之一是获取系统当前时间
-
获取系统当前时间是一个长整型数据Long, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据,表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.
2.DateFormat类
2.1 概念
-
DateFormat
是 Java 中用于格式化和解析日期和时间的抽象类,它位于java.text
包中。该类提供了一系列方法,允许你将日期对象(如java.util.Date
)转换为特定格式的字符串,也可以将特定格式的字符串解析为日期对象
2.2 主要作用
-
日期格式化:将
Date
对象转换为符合特定格式的字符串,方便展示给用户。 -
日期解析:将符合特定格式的字符串转换为
Date
对象,便于程序进行日期处理
2.3 常用子类
-
DateFormat
是抽象类,不能直接实例化,通常会使用它的子类,如SimpleDateFormat
或DateTimeFormatter
(Java 8 及以后推荐使用)。
2.4 常用方法
-
format(Date date):将给定的
Date
对象格式化为字符串。 -
parse(String source):将给定的字符串解析为
Date
对象。
2.5 应用
-
String format(Date date) 方法用于格式化时间
-
static DateFormat getDateInstance() 获取日期的DateFormat 对象
-
static DateFormat getDateTimeInstance() 获取日期-时间的DateFormat 对象
-
static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle)获取给定 日期和时间格式化风格 DateFormat 对象 (可选参数 short,full, long, medium ,)
2.6 SimpleDateFormat
-
功能:完成日期的显示格式化
-
只要通过向SimpleDateFormat 的构造函数传递格式字符串“EEEE-MM-dd-yyyy",
-
我们就能够指明自己想要的格式. 然后调用DateFormat(Date date)方法,得到想要的格式。
-
EEEE是星期, MM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yyyy"会显示 星期五-02-27-2009
"yyyy-MM-dd EEEE hh:mm:ss" yyyy年MM月dd日 HH时mm分ss秒SSS毫秒 "yyyy/MM/dd hh:mm:ss" "EEE, d MMM yyyy HH:mm:ss Z"
-
public Date parse(String source) ( DateFormat类中 )解析格式化一个字符串时间, 将一个字符串转换成时间
-
例如:Date d = sdf2.parse("2008/10/28 13:20:22");//注意字符串的格式必须和设定的格式(sdf2)一致
3.Date
3.1 创建日期对象
-
创建一个日期对象,使用new操作符和Date构造函数即可
-
Date now = new Date();
-
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。
3.2 Date的方法
-
与其他引用类型一样,Date类型也重写了toLocaleString()、toString()方法;但这些方法返回的值与其他 类型中的方法不同。
3.3 Calendar类
-
我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢?
-
使用Calendar 类。Calendar 类也是一个抽象类,它有一个子类GregorianCalendar,接下来我会利用这个子类来演示这个过程,请看以下代码
-
使用GregorianCalendar类获取时间相关信息
-
calendar.get(Calendar.YEAR) 获取年
-
calendar.get(Calendar.MONTH) + 1) 获取月
Calendar cal = new GregorianCalendar(); cal.set(Calendar.YEAR, 2012); //设置cal的年份为 2012年 System.out.println(cal.get(Calendar.YEAR)); //打印年份 cal.set(Calendar.MONTH, 9); //设置月份 System.out.println(cal.get(Calendar.MONTH)); cal.set(2018, 3, 2); //设置年月日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf.format(cal.getTime())); cal.add(Calendar.YEAR, 2); //年上加2年 cal.add(Calendar.MONTH, 2);//月上加2 System.out.println(sdf.format(cal.getTime()));
-
3.4 日期数据的定制格式
-
只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01.
SimpleDateFormat bartDateFormat =
new SimpleDateFormat(“EEEE-MMMM-dd-yyyy”);
// E 星期中的天数, M 年中的月份 , D 年中的天数,y年
Date date = new Date();
System.out.println(bartDateFormat.format(date));
3.5日期格式化方法
-
Date类型还有一些专门用于将日期格式化为字符串的方法
-
toDateString() -以特定于实现的格式显示星期几、月、日和年;
-
toTimeString() -以特定于实现的格式显示时、分、秒和时区;
-
toLocaleDateString() -以特定于地区的格式显示星期几、月、日和年
-
toLocaleTrimeString() -以特定于实现的格式显示时、分、秒;
-
toUTCString() -以特定于实现的格式完整的UTC日期。
-
-
与toLocaleString()和toString()方法一样,以上这些字符串格式方法的输出也是因浏览器而异的,因此没有哪一个方法能够用来在用户界面中显示一致的日期信息。
3.6 日期/时间组件方法
-
getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
-
setTime(毫秒) 以毫秒数设置日期,会改变整个日期 getFullYear() 取得4位数的年份(如2007而非仅07)
-
getUTCFullYear() 返回UTC日期的4位数年份
-
setFullYear(年) 设置日期的年份。传人的年份值必须是4位数字(如2007而非仅07)
-
setUTCFullYear(年) 设置UTC日期的年份。传人的年份值必须是4位数字(如2007而非仅07)
-
getMonth() 返回日期中的月份,其中O表示一月,11表示十二月
-
getUTCMonth() 返回UTC日期中的月份,其中0表示一月,11表示十二月
-
setMonth(月) 设置日期的月份。传人的月份值必须大于O,超过11则增加年份
-
setUTCMonth(月) 设置UTC日期的月份。传人的月份值必须大于O,超过11则增加年份
-
getDate() 返回日期月份中的天数(1到31)
-
getUTCDate() 返回UTC日期月份中的天数(1到31)
-
setDate(日) 设置日期月份中的天数。如果传人的值超过了该月中应有的天数,则增加月份
-
setUTDate(日) 设置UTC日期月份中的天数。如果传人的值超过了该月中应有的天数,则增加月份
-
getDay() 返回日期中星期的星期几(其中0表示星期日,6表示星期六)
-
getUTCDay() 返回UTC日期中星期的星期几(其中0表示星期日,6表示星期六)
-
getHours() 返回日期中的小时数(0到23)
-
getUTCHours() 返回UTC日期中的小时数(O到23)
-
setHours(时) 设置日期中的小时数。传人的值超过了23则增加月份中的天数
-
setUTCHours(时) 设置UTC日期中的小时数。传人的值超过了23则增加月份中的天数
-
getMinutes() 返回日期中的分钟数(0到59)
-
getUTCMinutes() 返回UTC日期中的分钟数(O到59)。
-
setMinutes(分) 设置日期中的分钟数。传入的值超过59则增加小时数
-
setUTCMinutes(分) 设置UTC日期中的分钟数。传入的值超过59则增加小时数
-
getSeconds() 返回日期中的秒数(O至IJ59)。
-
getUTCSeconds() 返回UTC日期中的秒数(0到59)。
-
setSeconds(秒) 设置日期中的秒数。传人的值超过了59会增加分钟数
-
set UTCSeconds(秒) 设置UTC日期中的秒数。传人的值超过了59会增加分钟数
-
getMilliseconds() 返回日期中的毫秒数
-
getUTCMilliseconds() 返回UTC日期中的毫秒数
-
setMilliseconds(毫秒) 设置日期中的毫秒数
-
setUTCMilliseconds(毫秒) 设置UTC日期中的毫秒数
-
getTimezoneOffset() 返回本地时间与UTC时间相差的分钟数。例如,美国东部标准时间返回300。在某地进入夏令时的情况下,这个值会有所变化
3.7 日期和时间模式
-
字母 日期或时间元素 表示 示例
-
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
4.String和Date之间的互转(localdatetime)
-
String
与Date
之间的互转可以借助java.time
包下的LocalDateTime
类来实现
4.1 String转
LocalDateTime`
-
要将
String
转换为LocalDateTime
,需要先定义日期时间的格式,然后使用DateTimeFormatter
进行解析。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToLocalDateTimeExample {
public static void main(String[] args) {
// 定义日期时间字符串
String dateTimeStr = "2025-02-08 12:30:00";
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将字符串解析为 LocalDateTime 对象
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
System.out.println("Parsed LocalDateTime: " + localDateTime);
}
}
4.2 LocalDateTime
转 String
-
将
LocalDateTime
转换为String
同样需要使用DateTimeFormatter
来指定输出的格式import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeToStringExample { public static void main(String[] args) { // 获取当前的 LocalDateTime 对象 LocalDateTime now = LocalDateTime.now(); // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 将 LocalDateTime 对象格式化为字符串 String dateTimeStr = now.format(formatter); System.out.println("Formatted String: " + dateTimeStr); } }
3.3 LocalDateTime
与 Date
之间的转换
-
由于
LocalDateTime
是 Java 8 引入的新类,而Date
是旧的日期时间类,它们之间的转换需要借助Instant
和ZoneId
。
3.3.1 LocalDateTime
转 Date
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateToLocalDateTimeExample {
public static void main(String[] args) {
// 创建一个 Date 对象
Date date = new Date();
// 将 Date 转换为 Instant
Instant instant = date.toInstant();
// 获取系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
// 将 Instant 转换为 LocalDateTime
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}