javase-16、API.日期时间相关

发布于:2024-12-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、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_DAY24 小时制的小时数)
    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)通过 LocalDateLocalTime 对象来创建 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 + " 天");