formatTimestampWithFullAndSimple function
格式化时间戳,返回完整和简略两种格式
返回格式: { full: 完整日期信息, simple: 简略日期信息 }
full 格式:
- 本年:M月d日 周几 上午/中午/下午/晚上/凌晨 H:mm
- 非本年:yyyy年 M月d日 周几 上午/中午/下午/晚上/凌晨 H:mm
simple 格式:
- 今天:上午/中午/下午/晚上/凌晨 H:mm
- 昨天:昨天 上午/中午/下午/晚上/凌晨 H:mm
- 本周:周几 上午/中午/下午/晚上/凌晨 H:mm
- 本年:M月d日 上午/中午/下午/晚上/凌晨 H:mm
- 非本年:yyyy年 M月d日 上午/中午/下午/晚上/凌晨 H:mm
Implementation
FormatTimestampWithFullAndSimpleResult formatTimestampWithFullAndSimple(int timestamp) {
timestamp = _normalizeTimestamp(timestamp);
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp);
final DateTime now = DateTime.now();
// 关键时间点
final DateTime startOfYear = DateTime(now.year, 1, 1);
final DateTime startOfWeek = now.subtract(Duration(days: now.weekday - 1));
final DateTime startOfWeekMidnight = DateTime(startOfWeek.year, startOfWeek.month, startOfWeek.day);
final DateTime todayMidnight = DateTime(now.year, now.month, now.day);
final DateTime yesterdayMidnight = todayMidnight.subtract(const Duration(days: 1));
// 判断是否为今年
final bool isThisYear = dateTime.isAfter(startOfYear) || dateTime.isAtSameMomentAs(startOfYear);
// 判断是否为今天
final bool isToday = dateTime.isAfter(todayMidnight);
// 判断是否为昨天
final bool isYesterday = dateTime.isAfter(yesterdayMidnight) && dateTime.isBefore(todayMidnight);
// 判断是否在本周
final bool isThisWeek = dateTime.isAfter(startOfWeekMidnight) || dateTime.isAtSameMomentAs(startOfWeekMidnight);
// 获取时间段
final String period = _getPeriod(dateTime.hour);
// 格式化时间(HH:mm)
final String timeStr = '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
// 获取星期几
final String weekday = _getWeekday(dateTime.weekday);
// 构建完整的日期部分
String fullDatePart;
if (!isThisYear) {
fullDatePart = '${dateTime.year}年${dateTime.month}月${dateTime.day}日 $weekday';
} else {
fullDatePart = '${dateTime.month}月${dateTime.day}日 $weekday';
}
// 构建完整格式
final String full = '$fullDatePart $period $timeStr';
// 构建简略格式
String simple;
if (isToday) {
simple = '$period $timeStr';
} else if (isYesterday) {
simple = '昨天 $period $timeStr';
} else if (isThisWeek) {
simple = '$weekday $period $timeStr';
} else if (isThisYear) {
simple = '${dateTime.month}月${dateTime.day}日 $period $timeStr';
} else {
simple = '${dateTime.year}年${dateTime.month}月${dateTime.day}日 $period $timeStr';
}
return FormatTimestampWithFullAndSimpleResult(full: full, simple: simple);
}