主要用于将时间转换成类似微信、微博等社交媒体常见的"多久之前"的格式
1. 主要功能分析
这个类包含一个核心方法timeAgo,将日期时间转换成以下几种人性化格式:
- 1分钟内:显示"刚刚"
- 1小时内:显示"XX分钟前"
- 24小时内:显示具体时间(如"14:30")
- 30天内:显示具体日期(如"3月15日")
- 365天内:显示"XX个月前"
- 365天以上:显示"XX年前"
2. 使用场景
- 社交媒体评论时间显示
- 消息列表时间显示
- 动态更新时间显示
- 新闻发布时间显示
3. 代码实现过程
public class TimeAgoUtils {
@SuppressLint("NewApi")
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");
/**
* 根据给定的日期,返回“刚刚”或“多久前”的字符串表示。
* @param dateTimeString 给定的日期
* @return “刚刚”或“多久前”的字符串
*/
@SuppressLint("NewApi")
public static String timeAgo(String dateTimeString) {
if (dateTimeString == null) {
throw new IllegalArgumentException("Date cannot be null");
}
Instant now = Instant.now();
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
// 将字符串解析为 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeString, formatter);
// 将 LocalDateTime 转换为 Date
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
Instant then = date.toInstant();
long seconds = Duration.between(then, now).getSeconds();
if (seconds < 60) {
return "刚刚";
} else if (seconds < 3600) {
long minutes = seconds / 60;
return minutes + "分钟前";
} else if (seconds < 86400) { // 1天内
LocalDateTime localThen = LocalDateTime.ofInstant(then, ZoneId.systemDefault());
return localThen.format(TIME_FORMATTER);
} else if (seconds < 2592000) { // 30天
LocalDateTime localThen = LocalDateTime.ofInstant(then, ZoneId.systemDefault());
int month = localThen.getMonthValue();
int day = localThen.getDayOfMonth();
return month + "月" + day + "日";
} else if (seconds < 31104000) { // 365天
long months = seconds / 2592000;
return months + "个月前";
} else {
long years = seconds / 31104000;
return years + "年前";
}
}
}
这种时间显示方式更加直观友好,让用户能够快速理解内容的时效性。
4. 使用示例
// 假设评论时间是 "2024-03-20 14:30"
String commentTime = "2024-03-20 14:30";
String formattedTime = TimeAgoUtils.timeAgo(commentTime);
// 根据当前时间的不同,可能显示:
// - "刚刚"
// - "5分钟前"
// - "14:30"
// - "3月20日"
// - "1个月前"
// - "1年前"
5. 效果图
6. 关于作者其它项目视频教程介绍
本人在b站录制的一些视频教程项目,免费供大家学习
- Android新闻资讯app实战:https://www.bilibili.com/video/BV1CA1vYoEad/?vd_source=984bb03f768809c7d33f20179343d8c8
- Androidstudio开发购物商城实战:https://www.bilibili.com/video/BV1PjHfeXE8U/?vd_source=984bb03f768809c7d33f20179343d8c8
- Android开发备忘录记事本实战:https://www.bilibili.com/video/BV1FJ4m1u76G?vd_source=984bb03f768809c7d33f20179343d8c8&spm_id_from=333.788.videopod.sections
- Androidstudio底部导航栏实现:https://www.bilibili.com/video/BV1XB4y1d7et/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8
- Android使用TabLayout+ViewPager2实现左右滑动切换:https://www.bilibili.com/video/BV1Mz4y1c7eX/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8