Java超级实用工具类 - 日期/时间处理

1. 概述

本篇文章主要介绍Java开发常用的工具类,所谓工欲善其事必先利其器,有了好的工具无论是工作还是学习都会游刃有余。
本文主要介绍日期/时间处理工具类:FastDateFormat、DateFormatUtils、DateUtils。

Maven仓库地址:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.11</version>
</dependency>

2. FastDateFormat

FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat。因为是线程安全的,所以你可以把它作为一个类的静态字段使用。构造方法为protected,不允许直接构造它的对象,可以通过工厂方法获取。FastDateFormat之所以是线程安全的,是因为这个类是无状态的:内部的成员在构造时就完成了初始化,并在对象存活期,不提供任何API供外界修改他们。

2.1 获取实例

// 使用默认区域设置中的默认格式获取实例
public static FastDateFormat getInstance();
// 使用默认区域设置中的指定格式获取实例
public static FastDateFormat getInstance(String pattern);
// 使用指定的时区和格式获取实例
public static FastDateFormat getInstance(String pattern, TimeZone timeZone);
// 使用指定的格式和区域设置来获取实例
public static FastDateFormat getInstance(String pattern, Locale locale);
// 使用指定的格式、时区、区域设置来获取实例
public static FastDateFormat getInstance(String pattern, TimeZone timeZone, Locale locale);
// 在默认时区和默认区域设置中使用指定样式获取日期实例
public static FastDateFormat getDateInstance(int style);
// 在默认时区和指定区域设置中使用指定样式获取日期实例
public static FastDateFormat getDateInstance(int style, Locale locale);
// 在指定时区和默认区域设置中使用指定样式获取日期实例
public static FastDateFormat getDateInstance(int style, TimeZone timeZone);
// 在指定时区和指定区域设置中使用指定样式获取日期实例
public static FastDateFormat getDateInstance(int style, TimeZone timeZone, Locale locale);
// 在默认时区和默认区域设置中使用指定样式获取时间实例
public static FastDateFormat getTimeInstance(int style);
// 在默认时区和指定区域设置中使用指定样式获取时间实例
public static FastDateFormat getTimeInstance(int style, Locale locale);
// 在指定时区和默认区域设置中使用指定样式获取时间实例
public static FastDateFormat getTimeInstance(int style, TimeZone timeZone);
// 在指定时区和指定区域设置中使用指定样式获取时间实例
public static FastDateFormat getTimeInstance(int style, TimeZone timeZone, Locale locale);
// 在默认时区和默认区域设置中使用指定样式获取日期和时间实例
public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle);
// 在默认时区和指定区域设置中使用指定样式获取日期和时间实例
public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale);
// 在指定时区和默认区域设置中使用指定样式获取日期和时间实例
public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, TimeZone timeZone);
// 在指定时区和指定区域设置中使用指定样式获取日期和时间实例
public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, TimeZone timeZone, Locale locale);

2.2 格式化

// 设置日期、日历对象的格式
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos);
// 格式化毫秒值
public String format(long millis);
// 格式化日期
public String format(Date date);
// 格式化日历
public String format(Calendar calendar);

2.3 获取格式化日期使用的格式

public String getPattern();

2.4 获取格式化日期使用的时区

public TimeZone getTimeZone();

2.5 获取格式化日期使用的区域

public Locale getLocale();

3. DateFormatUtils

将时间转化为字符串的工具类。不可实例化对象且线程安全,依赖于FastDateFormat。

3.1 常量

// yyyy-MM-dd'T'HH:mm:ss
public static final FastDateFormat ISO_8601_EXTENDED_DATETIME_FORMAT;
// yyyy-MM-dd'T'HH:mm:ssZZ
public static final FastDateFormat ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT;
// yyyy-MM-dd
public static final FastDateFormat ISO_8601_EXTENDED_DATE_FORMAT;
// HH:mm:ss
public static final FastDateFormat ISO_8601_EXTENDED_TIME_FORMAT;
// HH:mm:ssZZ
public static final FastDateFormat ISO_8601_EXTENDED_TIME_TIME_ZONE_FORMAT;
// EEE, dd MMM yyyy HH:mm:ss Z
public static final FastDateFormat SMTP_DATETIME_FORMAT;

3.2 格式化

// 使用UTC时区将日期/时间格式化为特定模式
public static String formatUTC(long millis, String pattern);
public static String formatUTC(Date date, String pattern);
// 使用UTC时区和指定区域将日期/时间格式化为特定模式
public static String formatUTC(long millis, String pattern, Locale locale);
public static String formatUTC(Date date, String pattern, Locale locale);
// 格式化日期/时间
public static String format(long millis, String pattern);
public static String format(Date date, String pattern);
public static String format(Calendar calendar, String pattern);
// 按指定时区格式化日期/时间
public static String format(long millis, String pattern, TimeZone timeZone);
public static String format(Date date, String pattern, TimeZone timeZone);
public static String format(Calendar calendar, String pattern, TimeZone timeZone);
// 按指定区域格式化日期/时间
public static String format(long millis, String pattern, Locale locale);
public static String format(Date date, String pattern, Locale locale);
public static String format(Calendar calendar, String pattern, Locale locale);
// 按指定时区、区域格式化日期/时间
public static String format(long millis, String pattern, TimeZone timeZone, Locale locale);
public static String format(Date date, String pattern, TimeZone timeZone, Locale locale);
public static String format(Calendar calendar, String pattern, TimeZone timeZone, Locale locale);

4. DateUtils

4.1 常量

// 标准秒的毫秒数 1000L
public static final long MILLIS_PER_SECOND;
// 标准分钟的毫秒数 60000L
public static final long MILLIS_PER_MINUTE;
// 标准小时的毫秒数 3600000L
public static final long MILLIS_PER_HOUR;
// 标准天的毫秒数 86400000L
public static final long MILLIS_PER_DAY;

4.2 日期/时间比对

// 检查两个日期是否在同一天,忽略时间
public static boolean isSameDay(Date date1, Date date2);
public static boolean isSameDay(Calendar cal1, Calendar cal2);
// 检查两个日期在时间上是否表示同一时刻,具体到毫秒值
public static boolean isSameInstant(Date date1, Date date2);
public static boolean isSameInstant(Calendar cal1, Calendar cal2);
// 检查两个日历对象是否表示相同的本地时间
public static boolean isSameLocalTime(Calendar cal1, Calendar cal2);

4.3 解析日期/时间字符串

// 尝试用不同的格式来解析字符串,如果都不匹配,抛出ParseException
public static Date parseDate(String str, String... parsePatterns);
// 按指定的区域、尝试用不同的格式来解析字符串,如果都不匹配,抛出ParseException
public static Date parseDate(String str, Locale locale, String... parsePatterns);
// 尝试用不同的格式来解析字符串,如果都不匹配,抛出ParseException,解析时会校验字符串的格式是否正确
public static Date parseDateStrictly(String str, String... parsePatterns);
// 按指定的区域、尝试用不同的格式来解析字符串,如果都不匹配,抛出ParseException,解析时会校验字符串的格式是否正确
public static Date parseDateStrictly(String str, Locale locale, String... parsePatterns);

4.4 日期/时间操作

// 返回增加/减少的年份的日期,原日期不变
public static Date addYears(Date date, int amount);
// 返回增加/减少的月份的日期,原日期不变
public static Date addMonths(Date date, int amount);
// 返回增加/减少的星期的日期,原日期不变
public static Date addWeeks(Date date, int amount);
// 返回增加/减少的天数的日期,原日期不变
public static Date addDays(Date date, int amount);
// 返回增加/减少的小时的日期,原日期不变
public static Date addHours(Date date, int amount);
// 返回增加/减少的分钟的日期,原日期不变
public static Date addMinutes(Date date, int amount);
// 返回增加/减少的秒的日期,原日期不变
public static Date addSeconds(Date date, int amount);
// 返回增加/减少的毫秒的日期,原日期不变
public static Date addMilliseconds(Date date, int amount);
// 设置年份,返回新的对象,原对象日期不变
public static Date setYears(Date date, int amount);
// 设置月份,返回新的对象,原对象日期不变
public static Date setMonths(Date date, int amount);
// 设置日期,返回新的对象,原对象日期不变
public static Date setDays(Date date, int amount);
// 设置小时,返回新的对象,原对象日期不变
public static Date setHours(Date date, int amount);
// 设置分钟,返回新的对象,原对象日期不变
public static Date setMinutes(Date date, int amount);
// 设置秒,返回新的对象,原对象日期不变
public static Date setSeconds(Date date, int amount);
// 设置毫秒,返回新的对象,原对象日期不变
public static Date setMilliseconds(Date date, int amount);

4.5 日期转日历

// 将日期转为日历
public static Calendar toCalendar(Date date);
// 将日期按时区转为日历
public static Calendar toCalendar(Date date, TimeZone tz);

4.6 初始化

// 将指定类型后面的日期初始化
// 可选类型:Calendar.SECOND Calendar.MINUTE Calendar.HOUR_OF_DAY Calendar.DAY_OF_MONTH Calendar.MONTH Calendar.YEAR
public static Date round(Date date, int field);
public static Calendar round(Calendar date, int field);
public static Date round(Object date, int field);
// 例:
DateUtils.round(new Date(), Calendar.YEAR); // 2019-01-01 00:00:00
DateUtils.round(new Date(), Calendar.HOUR_OF_DAY); // 2019-08-15 01:00:00
// 从给定字段开始格式化截取日期,对一个时间对象的某个字段进行截取
public static Date truncate(Date date, int field);
public static Calendar truncate(Calendar date, int field);
public static Date truncate(Object date, int field);
// 从给定字段开始“向上”格式化日期
public static Date ceiling(Date date, int field);
public static Calendar ceiling(Calendar date, int field);
public static Date ceiling(Object date, int field);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

探_无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值