一、Date类
1、概述
java.util.Date
是一个用于处理日期和时间的类。
表示,1970 年 1 月 1 日 00:00:00 UTC 到该特定瞬间所经过的毫秒数。
时间的表示形式
2024-11-11 11:11:11 人
123456789【时间戳】 计算机
2、构造方法
Date() // 当前时间 12345646498798
Date(long date) //指定时间
例1
Date now = new Date();
System.out.println(now);
例2
long milliseconds = 1609459200000L; // 这个时间戳对应的日期大约是2021年1月1日
Date date = new Date(milliseconds);
System.out.println(date);
3、常用方法
long getTime(); //获取时间,返回从1970年1月1日 00:00:00经过的毫秒数
setTime(long time) //设定时间
boolean before(Date when) //是否比指定的时间(when),早
boolean after(Date when) //是否比指定的时间(when),晚
boolean equals(Object obj) //是否比指定的时间(when),相等
二、SimpleDateFormat
1、概述
用于格式化(日期 - > 文本)和解析(文本 - > 日期)日期的具体类,它位于 java.text
包中。
date -> str
str -> date
格式字符
y:年份, yy两位年份(如 24), yyyy四位年份(如 2024)
M:月份, M(1 - 12), MM(01 - 12)
d:日期, d(1 - 31), dd(01 - 31)
h:小时(12小时制), h(1 - 12), hh(01 - 12)
H:小时(24小时制), H(0 - 23), HH(00 - 23)
m:分钟, m(0 - 59), mm(00 - 59)
s:秒数, s(0 - 59), ss(00 - 59)
构造方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2、常用方法
Date -> String
使用format(Date date)
方法,将 Date
对象格式化为指定格式的字符串。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String now_str = sdf.format(now);
System.out.println(now_str);
String -> Date
使用 parse(String source)
方法,将符合指定格式的字符串解析为 Date
对象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = sdf.parse("2024-11-09 12:00:00");
System.out.println( now );
三、Calendar
1、概述
作用
java.util.Calendar
用于处理日期和时间。
- 获取日期中的年、月、日、时、分、秒等字段的值,
- 进行日期的计算和转换。
实例化
java.util.Calendar
是一个抽象类,使用 Calendar.getInstance()
静态方法获取实例
Calendar calendar = Calendar.getInstance();
2、常用方法
1)get方法
使用 int get(int field)
获取Calendar对象指定字段(年、月、日、时、分、秒…)的值。
int get(int field)
field常见取值
Calendar.YEAR int?
Calendar.MONTH(注意:月份从0开始,0代表1月,11 代表12)
Calendar.DAY_OF_MONTH
Calendar.HOUR_OF_DAY(24 小时制的小时数)
Calendar.MINUTE
Calendar.SECOND
例如
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1; // 因为月份从0开始,所以这里加1
2)set方法
使用 set()
方法,设置某个字段的值。
void set(int field, int value);
void set(int year, int month, int date);
void set(int year, int month, int date, int hourOfDay, int minute);
void set(int year, int month, int date, int hourOfDay, int minute,
int second)
例如:
Calendar calendar = Calendar.getInstance(); //日历-当前的时间
calendar.set(Calendar.YEAR, 2025);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 14); // 2025-2-14
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
3)getTime
Date getTime()
返回表示此 Calendar 的时间值的 Date 对象
例如:
Calendar calendar = Calendar.getInstance(); // 日历对象
Date date = calendar.getTime(); // Calendar对象 -> Date对象
4)setTime
void setTime(Date date)
使用给定的 Date 设置此日历的时间。
例如:
Calendar calendar = Calendar.getInstance();
Date date = new Date();
calendar.setTime(date);
5)add
void add(int field, int amount)
向给定的日历字段【添加或减】去指定的时间量
例如:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 1); // 加1天
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("加1天后是:" + year + "年" + month + "月" + day + "日");
6)getTimeInMillis
long getTimeInMillis()
以毫秒为单位返回此日历的时间值
例如:
// 还有多久是元旦节
var now = Calendar.getInstance(); // 现在
var newYear = Calendar.getInstance();
newYear.set(2025, 1, 1); // 元旦
// 相差的毫秒数
var offsetMillis = newYear.getTimeInMillis() - now.getTimeInMillis();
// 相关的天数
var offsetDay = offsetMillis / (1000 * 60 * 60 * 24);
System.out.println(offsetDay);
以上白学,太难用
四、LocalDate、LocalTime、LocalDateTime
LocalDate
日期类、LocalTime
时间类、LocalDateTime
日期时间类,是 Java 8 引入的。
java.time.
1、创建
1)静态方法 now()
:获取当前系统的本地日期和时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
2)静态方法 of()
:通过指定年、月、日、时、分、秒等参数来创建 LocalDateTime 对象。
LocalDateTime specificTime = LocalDateTime.of(2024, 2, 14, 15, 0, 0);
System.out.println(specificTime);
3)通过 LocalDate
和 LocalTime
对象来创建 LocalDateTime
LocalDate date = LocalDate.of(2024, 2, 14);
LocalTime time = LocalTime.of(15, 0, 0);
LocalDateTime combinedDateTime = LocalDateTime.of(date, time);
System.out.println(combinedDateTime);
2、格式化与解析
格式化对象
DateTimeFormatter:用于定义格式化输出 或 解析的格式。
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
格式化输出:
- LocalDateTime -> String
- 使用
format(formatter)
实例方法
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
var now = LocalDateTime.now();
System.out.println(now.format(formatter));
解析:
- String -> LocalDateTime
- 使用
LocalDateTime.parse(dateTimeStr, formatter)
静态方法
var dateTimeStr = "2024-02-14 15:00:00";
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
var parsedDateTime = LocalDateTime.parse(dateTimeStr, formatter);
System.out.println(parsedDateTime);
3、获取年月日等
LocalDateTime dateTime = LocalDateTime.now();
System.out.println("年份: " + dateTime.getYear());
System.out.println("月份数字: " + dateTime.getMonthValue());
System.out.println("月份枚举: " + dateTime.getMonth());
System.out.println("日期: " + dateTime.getDayOfMonth());
System.out.println("一年中的第几天: " + dateTime.getDayOfYear());
System.out.println("小时: " + dateTime.getHour());
System.out.println("分钟: " + dateTime.getMinute());
System.out.println("秒: " + dateTime.getSecond());
System.out.println("纳秒: " + dateTime.getNano());
4、常用计算方法
加法操作
plusYears(long years): 返回此 LocalDateTime 的【副本】,增加指定的年数。
plusMonths(long months): 返回此 LocalDateTime 的副本,增加指定的月数。
plusDays(long days): 返回此 LocalDateTime 的副本,增加指定的天数。
plusHours(long hours): 返回此 LocalDateTime 的副本,增加指定的小时数。
plusMinutes(long minutes): 返回此 LocalDateTime 的副本,增加指定的分钟数。
plusSeconds(long seconds): 返回此 LocalDateTime 的副本,增加指定的秒数。
plusNanos(long nanos): 返回此 LocalDateTime 的副本,增加指定的纳秒数。
减法操作
与加法操作类似,对应的方法有 minusYears()
、minusMonths()
、minusDays()
等
例如
LocalDateTime now = LocalDateTime.now();
LocalDateTime add_rst = now.plusDays(5).plusHours(3);
System.out.println("加法操作后的时间: " + add_rst);
LocalDateTime sub_rst = now.minusMonths(2).minusDays(10);
System.out.println("减法操作后的时间: " + sub_rst);
五、ChronoUnit
使用java.time.temporal.ChronoUnit,计算两个LocalDateTime之间差
long ChronoUnit.YEARS.between(date1, date2);
date1 和 date2 之间相差的年数;
long ChronoUnit.MONTHS.between(date1, date2);
long ChronoUnit.DAYS.between(date1, date2);
long ChronoUnit.HOURS.between(date1, date2);
long ChronoUnit.MINUTES.between(date1, date2);
long ChronoUnit.SECONDS.between(date1, date2);
...
例如:
LocalDate date1 = LocalDate.of(2024, 11, 9);
LocalDate date2 = LocalDate.of(2024, 11, 12);
long days = ChronoUnit.DAYS.between(date1, date2);
System.out.println("相差 " + days + " 天");