马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
背景
因邮件数据过多,因此接纳了分表的方式来举行存储, 支持按照天、周、月来分表以下为计划的方法
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |