日期工具类
Date 日期类
该类的含义是具有毫秒精度的特定的时刻。并且这个类中的大多数的方法, 因为不适合国际化, 已经从 JDK1.2 更改为过期注解,相关的方法已经被弃用。
该类的官方定义如下:
public class Date
extends Object
implements Serializable, Cloneable, Comparable<Date>{
}
对于该类的构造函数, 只有两个还没有废弃。
Date(): 分配对象并对其进行初始化,以便它表示分配对象的时间,以最接近的毫秒为单位。
Date(long date): 分配一个对象并对其进行初始化,以表示自称为"纪元"的标准基准时间(即 1970年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
Date d = new Date();
Date d2 = new Date(long time);
常用方法:
演示代码
package demo;
import java.util.Date;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/10:08
* @Version
* @Description
*/
public class Ex4 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); // Wed Aug 31 10:11:11 CST 2022
// 获得Date 的时间轴 返回值是lang类型
System.out.println(date.getTime()); // 1661911871455
// 格式化输出
System.out.printf("%tF:年月日 %<tT:时分秒%n ",date); //2022-08-31:年月日 10:16:27:时分秒
// 这里的需要强转long类型
System.out.printf("%tF:年月日 %<tT:时分秒%n ",1661911871455L);// 2022-08-31:年月日 10:11:11:时分秒
// Long的最大值
System.out.printf("%tF:年月日 %<tT:时分秒%n ",Long.MAX_VALUE);// 292278994-08-17:年月日 15:12:55:时分秒
// 如果我们有Long的值的话就可以这样赋值
Date d = new Date(1661912187711L);
// 获取年
System.out.println(d.getYear());
System.out.println(d.getYear()+1900);// 2022 这里是正常的
// 获取月
System.out.println(d.getMonth()); // 7月
System.out.println(d.getMonth()+1);// 8月 这里是正常的
// 获取日
System.out.println(d.getDate()); //31 这里正确的
System.out.println(d.getDay()); //3
}
}
案例:使用java.util.Date 实现计算两个日期之间的天数?
2001-4-24 出生到现在 2022-8-31 有多少?
package demo;
import java.util.Calendar;
import java.util.Date;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/10:23
* @Version
* @Description
*/
public class Ex5 {
public static void main(String[] args) {
Calculateage(2000, 7, 4);
}
public static void Calculateage(int year,int month,int day){
// 设置自己的出生年月日
Date date = new Date();
date.setYear(year-1900);
date.setMonth(month-1);
date.setDate(day);
// 设置今天的日期
Date date1 = new Date();
long l = (date1.getTime() - date.getTime())/1000/60/60/24;
// 格式化输出
System.out.printf("出生日期%tF %<tT到现在%tF %<tT 一共活了%d天",date,date1,l);
}
}

Calendar 日历
import java.util.Calendar; 导入类
对于 Java 中的 Calendar 类, 该类为抽象类, 无法直接进行实例化, 如果想获得该对象, 可以使
用对应的工厂方法。它主要是提供特定时刻和一组日历的字段的转换的方法。以及用于操作日历字段的方法, 比方说:获取下周的日期。
该类和其他的区分区域的类一样, 他提供了一个类静态方法, 可以获取当前的 Calendar 对象信息。
该抽象类的定义如下:
public abstract class Calendar extends Object implements Serializable,
Cloneable, Comparable<Calendar>{
}
以及对应的静态类方法:
public static Calendar getInstance(){
Locale aLocale = Locale.getDefault(Locale.Category.FORMAT);
return createCalendar(defaultTimeZone(aLocale), aLocale);
}
package cn.webrx;
import java.util.Calendar;
import java.util.Date;
public class Calendar1 {
public static void main(String[] args) {
//Calendar是一个抽象类,不允许直接实例化,
//Calendar c = new Calendar();
//getInstance() 是实例化。
Calendar c = Calendar.getInstance();
//c.set();
//c.get();
Date d1 = c.getTime(); //getTime() 方法,功能将当前Calendar实例对象,转换
为Date的实例对象
Date d2 = new Date();
System.out.printf("%tF %<tT%n",d1);
System.out.printf("%tF %<tT%n",d2);
long time = c.getTimeInMillis();//日历返回一个时间戳 是一个long的类型数字
}
}
基础的使用方法:
Calendar calendar = Calendar.getInstance();
System.out.println("当前时间: " + calendar.getTime());
public static final int ERA = 0;
public static final int YEAR = 1;//*****
public static final int MONTH = 2;//*****
public static final int WEEK_OF_YEAR = 3;
public static final int WEEK_OF_MONTH = 4;
public static final int DATE = 5;
public static final int DAY_OF_MONTH = 5;//*****
public static final int DAY_OF_YEAR = 6;
public static final int DAY_OF_WEEK = 7; //
public static final int DAY_OF_WEEK_IN_MONTH = 8;
public static final int AM_PM = 9;
public static final int HOUR = 10;//*****
public static final int HOUR_OF_DAY = 11;
public static final int MINUTE = 12;//*****
public static final int SECOND = 13;//*****
public static final int MILLISECOND = 14;
public static final int ZONE_OFFSET = 15;
public static final int DST_OFFSET = 16;
public static final int FIELD_COUNT = 17;
设置方法: set()
//请计算2001 6 18哪一天是星期?
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.YEAR,2001);
c2.set(Calendar.MONTH,6-1);
c2.set(Calendar.DAY_OF_MONTH,18);
System.out.printf("%tF 这一日期是:%tA%n",c2,c2);
获取方法: get()方法
Calendar c = Calendar.getInstance();
System.out.println(c.get(1)); //传入一个1 返回一个年份 2022
System.out.println(c.get(Calendar.YEAR)); //传入一个1 返回一个年份 2022
System.out.println(c.get(2)+1);//返回月 7
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //11 几号
System.out.println(c.get(5)); //11 几号
Date和Calendar之间的转换
package demo;
import java.util.Calendar;
import java.util.Date;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/10:58
* @Version
* @Description Date和Calendar之间的转换
*/
public class Ex6 {
public static void main(String[] args) {
// 将Date转换为Calendar类实例
Date date = new Date();
date.setYear(2022-1900);
System.out.printf("%tF %<tT%n",date);
Calendar c = Calendar.getInstance();
c.setTime(date);// 此方法是Calendar的设置时间的方法,我们把Date以参数的形式转换为Calendar日历类
System.out.println(c.getTime());
// 将Calendar转换为Date
Calendar c1 = Calendar.getInstance();
c1.set(Calendar.YEAR,2001);
c1.set(Calendar.MONTH,4-1);// 这里因为日历类设置的月份是从
c1.set(Calendar.DAY_OF_MONTH,25);
Date aa = c1.getTime();
System.out.printf("%tF %<tT %n",aa);
}
}
日期之间的天数计算
package demo;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/14:47
* @Version
* @Description
*/
public class Ex7 {
public static void main(String[] args) {
LocalDate of = LocalDate.of(2002, 12, 3);
LocalDate now = LocalDate.now();
System.out.println(of.toEpochDay()); // 到大纪元 获取这两个数的天数
System.out.println(now.toEpochDay());
System.out.println(now.toEpochDay()-of.toEpochDay());// 计算出天数
// 获取设置时间与现在的时间 的天数 和月数
LocalDateTime lt = LocalDateTime.of(2002,12,23,21,43,2);
LocalDateTime le = LocalDateTime.now();
Duration d = Duration.between(lt,le);
System.out.println(d.toDays());//7190
System.out.println(d.toHours());//172577
System.out.println(d.toString());//PT172577H29M29.957S
}
}
SimpleDateFormat 格式化类

package demo;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/15:21
* @Version
* @Description 简单日期格式类 SimpleDateFormat
*/
public class SimpleDateFormatDemo {
public static void main(String[] args) {
// 实例化简单日期格式化 并设置格式化内容
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String format = sdf.format(d.getTime());
System.out.println(format);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
System.out.println(sdf1.format(d)+".jpg");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
System.out.println(sdf2.format(d));
}
}

LocalDate
LocalDate 表示了一个确切的日期,该对象值是不可变的,用起来和LocalTime基本一致。另外要注
意的是这些对象是不可变的,操作返回的总是一个新实例。
package demo;
import java.sql.SQLOutput;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/16:01
* @Version
* @Description 本地日期演示
* LocalDate 表示了一个确切的日期,该对象值是不可变的,用起来和LocalTime基本一致。另外要注
* 意的是这些对象是不可变的,操作返回的总是一个新实例。
*/
public class LocalDateDemo {
public static void main(String[] args) {
// DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// System.out.println(dtf.getLocale());//获取语言环境
LocalDate ld = LocalDate.now();// 获取系统当前日期
System.out.println(ld); //2022-08-31
LocalDate tomorrow = ld.plus(1, ChronoUnit.DAYS); // 添加一天
System.out.println(tomorrow);// 2022-09-01
LocalDate yesterday = tomorrow.minusDays(2); // 减去两天
System.out.println(yesterday);// 2022-08-30
// 设置时间2022-01-04
LocalDate independenceDay = LocalDate.of(2022, Month.JANUARY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek); //TUESDAY 获取星期几?
// 喜欢的自己研究
// DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("01.11.2019", germanFormatter); System.out.println(xmas); var d = LocalDate.now(); //d = d.plusDays(35);//日期增加35 //d = d.plus(25, ChronoUnit.MONTHS); d = d.plusDays(-5); System.out.println(d); System.out.println(d.format(DateTimeFormatter.ofPattern("yyyy年MM月dd 日"))); System.out.println(d.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINA));
// 将字符串转换为LocalDate
LocalDate d2 = LocalDate.parse("1985-11-23",DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(d2); //1985-11-23
// 获取今天的日期
LocalDate today = LocalDate.now();
// 今天是几号
int dayofMonth = today.getDayOfMonth();
// 今天是周几(返回的是个枚举类型,需要再getValue())
int dayofWeek = today.getDayOfWeek().getValue();
// 今天是今年中的第几天
int dayofYear = today.getDayOfYear();
// 根据字符串取:
LocalDate endOfFeb = LocalDate.parse("2018-02-28");
// 严格按照yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式
// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2018-04-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
// 2018-04-02
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
// 2018-04-30
// 取下一天:
LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1);
// 变成了 2018-05-01
// 取2017年1月第一个周一:
LocalDate firstMondayOf2017 = LocalDate.parse("2017-01-01") .with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
// 2017-01-02
LocalDate today1 = LocalDate.now();
DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String text = today1.format(formatters);
System.out.println(text);// 2022年08月31日
}
}
LocalTime
1、可以通过静态工厂方法of创建一个LocalDate实例
2、同过方法parse 解析时间
3、操作方式和LocalDate类似
DateTimeFormmater 格式化类
DateTimeFormatter
用于LocalDateTime、LocalDate、LocalTime和字符串的转换
DateTimeFormatter通常用来格式化日期和时间,里面预定义了像BASIC_ISO_DATE和
ISO_LOCAL_DATE这样的常量方便格式化。


package demo;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/31/19:49
* @Version
* @Description
*/
public class Tim {
public static void main(String[] args) {
LocalDate d2 = LocalDate.now(); // 实例化 当前日期
System.out.println(d2);// 输出日期 //2022-08-31
System.out.println(d2.format(DateTimeFormatter.BASIC_ISO_DATE));// 20220831
System.out.println(d2.format(DateTimeFormatter.ISO_DATE));// 2022-08-31
System.out.println(d2.format(DateTimeFormatter.ISO_LOCAL_DATE)); //2022-08-31
System.out.println(d2.format(DateTimeFormatter.ofPattern("yyyy年MM月 dd日")));// 2022年08月 31日
System.out.println(d2.format(DateTimeFormatter.ofPattern("E")));// 星期三
LocalTime t2 = LocalTime.now();
t2 = LocalTime.of(12, 33, 32); //设置 时分秒
System.out.println(t2); //12:33:32
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH-mm-ss");// 设置时分秒的格式
System.out.println(t2.format(dtf));//12-33-32
LocalDateTime d3 = LocalDateTime.now();//设置当前日期
DateTimeFormatter d3f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");// 设置输出格式化
System.out.println(d3.format(d3f));// 2022-08-31 19:54:00 星期三
}
}

浙公网安备 33010602011771号