A comprehensive Java utility library providing static method wrappers for common operations to reduce API learning costs and improve development efficiency
—
Comprehensive date and time utilities through the DateUtil class, providing parsing, formatting, calculation, and manipulation operations with enhanced DateTime class.
import cn.hutool.core.util.DateUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUnit;// Current date and time
public static DateTime date();
public static DateTime dateSecond();
// Create from components
public static DateTime date(int year, int month, int day);
public static DateTime date(int year, int month, int day, int hour, int minute, int second);
// Create from timestamp
public static DateTime date(long date);
public static DateTime date(Date date);// Parse with format
public static DateTime parse(CharSequence dateStr, String format);
public static DateTime parse(CharSequence dateStr, DatePattern pattern);
// Parse with auto-detection
public static DateTime parse(CharSequence dateStr);
public static DateTime parseDate(CharSequence dateStr);
public static DateTime parseTime(CharSequence dateStr);
public static DateTime parseDateTime(CharSequence dateStr);
// Parse from timestamp string
public static DateTime parseUTC(String utcString);
public static DateTime parseCst(String cstString);Usage Examples:
// Parse with specific format
DateTime dt = DateUtil.parse("2023-12-25 15:30:45", "yyyy-MM-dd HH:mm:ss");
// Auto-detect common formats
DateTime dt1 = DateUtil.parse("2023-12-25");
DateTime dt2 = DateUtil.parse("2023/12/25 15:30:45");
DateTime dt3 = DateUtil.parse("Dec 25, 2023");
// Parse ISO formats
DateTime utc = DateUtil.parseUTC("2023-12-25T15:30:45Z");// Format with pattern
public static String format(Date date, String format);
public static String format(Date date, DatePattern pattern);
// Common format methods
public static String formatDate(Date date);
public static String formatTime(Date date);
public static String formatDateTime(Date date);
// ISO formats
public static String formatIso8601(Date date);
public static String formatHttpDate(Date date);// Common date patterns from DatePattern enum
DatePattern.NORM_DATE_PATTERN = "yyyy-MM-dd";
DatePattern.NORM_TIME_PATTERN = "HH:mm:ss";
DatePattern.NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
DatePattern.ISO8601_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
DatePattern.HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z";
DatePattern.CHINESE_DATE_PATTERN = "yyyy年MM月dd日";Usage Examples:
Date now = new Date();
// Standard formatting
String dateStr = DateUtil.format(now, "yyyy-MM-dd HH:mm:ss");
String isoStr = DateUtil.formatIso8601(now);
// Predefined patterns
String date = DateUtil.formatDate(now); // "2023-12-25"
String time = DateUtil.formatTime(now); // "15:30:45"
String datetime = DateUtil.formatDateTime(now); // "2023-12-25 15:30:45"// Add/subtract time units
public static DateTime offset(Date date, DateField dateField, int offset);
public static DateTime offsetDay(Date date, int offset);
public static DateTime offsetWeek(Date date, int offset);
public static DateTime offsetMonth(Date date, int offset);
public static DateTime offsetYear(Date date, int offset);
// Time zone offset
public static DateTime offsetHour(Date date, int offset);
public static DateTime offsetMinute(Date date, int offset);
public static DateTime offsetSecond(Date date, int offset);// Calculate between dates
public static long between(Date beginDate, Date endDate, DateUnit unit);
public static long betweenDay(Date beginDate, Date endDate);
public static long betweenWeek(Date beginDate, Date endDate);
public static long betweenMonth(Date beginDate, Date endDate);
public static long betweenYear(Date beginDate, Date endDate);
// Time differences in milliseconds
public static long spendMs(long preTime);
public static String spendNt(long startNanoTime);Usage Examples:
Date now = new Date();
// Add 5 days
DateTime future = DateUtil.offsetDay(now, 5);
// Subtract 2 months
DateTime past = DateUtil.offsetMonth(now, -2);
// Calculate difference
Date start = DateUtil.parse("2023-01-01");
Date end = DateUtil.parse("2023-12-31");
long days = DateUtil.betweenDay(start, end); // Number of days between dates// Range creation
public static List<DateTime> range(Date startDate, Date endDate, DateField field);
public static List<DateTime> rangeToList(Date startDate, Date endDate, DateField field);
// Date boundaries
public static DateTime beginOfDay(Date date);
public static DateTime endOfDay(Date date);
public static DateTime beginOfWeek(Date date);
public static DateTime endOfWeek(Date date);
public static DateTime beginOfMonth(Date date);
public static DateTime endOfMonth(Date date);
public static DateTime beginOfYear(Date date);
public static DateTime endOfYear(Date date);// Check if dates are in same period
public static boolean isSameDay(Date date1, Date date2);
public static boolean isSameWeek(Date date1, Date date2, boolean isMondayAsFirstDay);
public static boolean isSameMonth(Date date1, Date date2);
public static boolean isSameYear(Date date1, Date date2);
// Weekend and weekday checks
public static boolean isWeekend(Date date);
public static boolean isWeekday(Date date);// Compare dates
public static int compare(Date date1, Date date2);
public static boolean isExpired(Date validDate);
// Before/after checks
public static boolean isIn(Date date, Date beginDate, Date endDate);// Get calendar info
public static int year(Date date);
public static int month(Date date);
public static int dayOfMonth(Date date);
public static int dayOfYear(Date date);
public static int dayOfWeek(Date date);
public static int hour(Date date, boolean is24HourClock);
public static int minute(Date date);
public static int second(Date date);
public static int millisecond(Date date);
// Week operations
public static int weekOfYear(Date date);
public static int weekOfMonth(Date date);// Age calculation
public static int age(Date birthDay, Date dateToCompare);
public static String formatBetween(Date beginDate, Date endDate, BetweenFormatter.Level level);Enhanced Date class with fluent API:
public class DateTime extends Date {
// Constructors
public DateTime();
public DateTime(Date date);
public DateTime(long timeMillis);
public DateTime(String dateStr, String format);
// Fluent operations
public DateTime offset(DateField dateField, int offset);
public DateTime offsetNew(DateField dateField, int offset);
// Formatting
public String toString(String format);
// Boundary operations
public DateTime beginOfDay();
public DateTime endOfDay();
public DateTime beginOfWeek();
public DateTime endOfWeek();
public DateTime beginOfMonth();
public DateTime endOfMonth();
public DateTime beginOfYear();
public DateTime endOfYear();
// Conversion
public long getTime();
public String toDateStr();
public String toTimeStr();
public String toSqlTimestamp();
// Comparison
public boolean isBefore(Date date);
public boolean isAfter(Date date);
public boolean isWeekend();
}Usage Examples:
// Create and manipulate DateTime
DateTime dt = DateUtil.date()
.beginOfDay() // Start of today
.offsetDay(7) // Add 7 days
.endOfDay(); // End of that day
// Chaining operations
String result = DateUtil.parse("2023-12-25")
.offsetMonth(1)
.toString("yyyy-MM-dd"); // "2024-01-25"
// Weekend check
boolean weekend = DateUtil.date().isWeekend();public enum DateField {
MILLENNIUM, // 千年
CENTURY, // 世纪
DECADE, // 十年
YEAR, // 年
MONTH, // 月
WEEK_OF_YEAR, // 一年中的第几周
WEEK_OF_MONTH, // 一月中的第几周
DAY_OF_YEAR, // 一年中的第几天
DAY_OF_MONTH, // 一月中的第几天
DAY_OF_WEEK, // 一周中的第几天
HOUR_OF_DAY, // 小时(24小时制)
HOUR, // 小时(12小时制)
MINUTE, // 分钟
SECOND, // 秒
MILLISECOND // 毫秒
}public enum DateUnit {
MILLISECOND(1),
SECOND(1000),
MINUTE(60 * 1000),
HOUR(60 * 60 * 1000),
DAY(24 * 60 * 60 * 1000),
WEEK(7 * 24 * 60 * 60 * 1000),
MONTH, // Variable length
YEAR // Variable length
}public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}All date operations handle null inputs gracefully and support both Date and DateTime objects. The DateTime class provides additional functionality and fluent API for complex date manipulations.
Install with Tessl CLI
npx tessl i tessl/maven-cn-hutool--hutool-all