当前位置:首页 > 云服务器 > 正文

Android日期工具类DateUtil怎么用?,有哪些方法?

核心功能

  • 日期格式化:将 Date 对象转为指定格式字符串,或反向解析。
  • 时间戳转换:毫秒值与 Date 对象、字符串之间的互转。
  • 日期计算:加减年、月、周、日、时、分、秒。
  • 日期比较:判断先后、相等,计算差值。
  • 获取属性:提取年、月、日、星期、季度等。

常用方法表格

方法 参数 返回值 说明
formatDate(Date date, String pattern) Date, 格式 String 格式化日期
parseDate(String str, String pattern) 字符串, 格式 Date 解析字符串为日期
millisToDate(long millis) 毫秒值 Date 时间戳转日期
dateToMillis(Date date) Date long 日期转时间戳
addDays(Date date, int days) Date, 天数 Date 增加指定天数
addMonths(Date date, int months) Date, 月数 Date 增加指定月数
getYear(Date date) Date int 获取年份
getMonth(Date date) Date int 获取月份(0-11)
getDayOfWeek(Date date) Date int 获取星期几(1=周日)
daysBetween(Date start, Date end) 开始, 结束 long 计算间隔天数
isBefore(Date d1, Date d2) 两个日期 boolean 判断 d1 是否在 d2 之前
isSameDay(Date d1, Date d2) 两个日期 boolean 判断是否同一天

示例代码(Java)

public class DateUtil { private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss"; // 格式化 public static String formatDate(Date date) { return formatDate(date, DEFAULT_PATTERN); } public static String formatDate(Date date, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.getDefault()); return sdf.format(date); } // 解析 public static Date parseDate(String dateStr) { return parseDate(dateStr, DEFAULT_PATTERN); } public static Date parseDate(String dateStr, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.getDefault()); try { return sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); return null; } } // 时间戳转换 public static Date millisToDate(long millis) { return new Date(millis); } public static long dateToMillis(Date date) { return date.getTime(); } // 日期加减 public static Date addDays(Date date, int days) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, days); return cal.getTime(); } public static Date addMonths(Date date, int months) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.MONTH, months); return cal.getTime(); } // 日期比较 public static boolean isBefore(Date d1, Date d2) { return d1.before(d2); } public static boolean isSameDay(Date d1, Date d2) { Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(d1); cal2.setTime(d2); return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR); } // 间隔天数 public static long daysBetween(Date start, Date end) { long diff = end.getTime() start.getTime(); return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); } }

注意事项

  • SimpleDateFormat 非线程安全:在多线程环境中应避免使用静态实例,或使用 ThreadLocal、DateTimeFormatter(Java 8+)或三方库如 Joda-Time。
  • 时区问题:使用 SimpleDateFormat 时需指定时区,尤其在跨时区应用中。
  • 月份起始:Calendar.MONTH 从 0 开始,获取月份时应加 1 或使用 Calendar.JANUARY 等常量。
  • Android 推荐:Android 项目中可使用 android.text.format.DateUtils 或 java.time 包(API 26+),也可使用 ThreeTenABP 向后兼容。

相关问题与解答

问题1:如何实现日期格式化,并处理时区?

解答:使用 SimpleDateFormat 时,通过 setTimeZone(TimeZone.getTimeZone("GMT+8")) 设置时区,若使用 Java 8+ 的 DateTimeFormatter,可结合 ZoneId,示例:

Android日期工具类DateUtil怎么用?,有哪些方法? 第1张

Android日期工具类DateUtil怎么用?,有哪些方法? 第2张

问题2:如何安全地计算两个日期之间的天数差,避免时区干扰?

解答:推荐使用 java.time 包(API 26+)中的 LocalDate,它不包含时区信息,直接计算天数差:

Android日期工具类DateUtil怎么用?,有哪些方法? 第3张

LocalDate start = LocalDate.of(2025, 1, 1); LocalDate end = LocalDate.now(); long days = ChronoUnit.DAYS.between(start, end);

若需兼容低版本,可先转换为 Date 对象,再使用 TimeUnit.DAYS.convert(end.getTime() start.getTime(), TimeUnit.MILLISECONDS),但需注意时区偏移可能影响结果,建议统一使用 UTC 时间。

0