【Java】时间区间内按天、周、月份索引后缀计算方法
背景因邮件数据过多,因此接纳了分表的方式来举行存储, 支持按照天、周、月来分表以下为计划的方法
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
public class IndexSuffixCalculator {
// 按天格式化日期的模式
private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 按周格式化日期的模式
private static final DateTimeFormatter WEEK_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 按月格式化日期的模式
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM");
/**
* 根据时间范围和配置计算索引后缀
*
* @param startDate 开始日期
* @param endDate 结束日期
* @param mode 配置模式:day, week 或 month
* @return 索引后缀列表
*/
public List<String> calculateIndexSuffixes(LocalDate startDate, LocalDate endDate, String mode) {
if ("day".equalsIgnoreCase(mode)) {
return calculateDailySuffixes(startDate, endDate);
} else if ("week".equalsIgnoreCase(mode)) {
return calculateWeeklySuffixes(startDate, endDate);
} else if ("month".equalsIgnoreCase(mode)) {
return calculateMonthlySuffixes(startDate, endDate);
} else {
throw new IllegalArgumentException("Unsupported mode: " + mode);
}
}
/**
* 按天计算索引后缀
*
* @param startDate 开始日期
* @param endDate 结束日期
* @return 按天的索引后缀列表
*/
private List<String> calculateDailySuffixes(LocalDate startDate, LocalDate endDate) {
List<String> suffixes = new ArrayList<>();
LocalDate currentDate = startDate;
while (!currentDate.isAfter(endDate)) {
suffixes.add(currentDate.format(DAY_FORMATTER));
currentDate = currentDate.plusDays(1); // 移动到下一天
}
return suffixes;
}
/**
* 按周计算索引后缀
*
* @param startDate 开始日期
* @param endDate 结束日期
* @return 按周的索引后缀列表
*/
private List<String> calculateWeeklySuffixes(LocalDate startDate, LocalDate endDate) {
List<String> suffixes = new ArrayList<>();
LocalDate currentDate = startDate.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
while (!currentDate.isAfter(endDate)) {
suffixes.add(currentDate.format(WEEK_FORMATTER));
currentDate = currentDate.plusWeeks(1); // 移动到下一周的周一
}
return suffixes;
}
/**
* 按月计算索引后缀
*
* @param startDate 开始日期
* @param endDate 结束日期
* @return 按月的索引后缀列表
*/
private List<String> calculateMonthlySuffixes(LocalDate startDate, LocalDate endDate) {
List<String> suffixes = new ArrayList<>();
LocalDate currentDate = startDate.with(TemporalAdjusters.firstDayOfMonth());
while (!currentDate.isAfter(endDate)) {
suffixes.add(currentDate.format(MONTH_FORMATTER));
currentDate = currentDate.plusMonths(1); // 移动到下一个月的第一天
}
return suffixes;
}
public static void main(String[] args) {
// 测试用例
LocalDate startDate = LocalDate.of(2025, 4, 1);
LocalDate endDate = LocalDate.of(2025, 6, 30);
IndexSuffixCalculator calculator = new IndexSuffixCalculator();
// 按天计算
List<String> dailySuffixes = calculator.calculateIndexSuffixes(startDate, endDate, "day");
System.out.println("Daily Suffixes: " + dailySuffixes);
// 按周计算
List<String> weeklySuffixes = calculator.calculateIndexSuffixes(startDate, endDate, "week");
System.out.println("Weekly Suffixes: " + weeklySuffixes);
// 按月计算
List<String> monthlySuffixes = calculator.calculateIndexSuffixes(startDate, endDate, "month");
System.out.println("Monthly Suffixes: " + monthlySuffixes);
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]