1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 根据当前日期获取前一天日期-小工具

根据当前日期获取前一天日期-小工具

时间:2022-02-02 18:31:01

相关推荐

根据当前日期获取前一天日期-小工具

前言:最近在做Hive数据中台的项目,关于Hive分区部分需要在前端定义,且需要满足日期自定义,日期随定时任务自动填充。

功能描述:用户在数据中台定义定时任务,任务需要按照指定时间启动,并且获取指定分区的数据,比如T-1的数据,定时任务在-09-01 12:00:00 启动任务,获取的分区必须是前一天11:30生成的分区数据,同时今天的定时任务生成的数据存入-09-01 11:30分区中,并且分区格式为yyyyMMddHHmm , 该需求需要通过Java自动生成。

思路:Java有一个SimpleDateFormat可以做时间格式化输出, 比如new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())。

我希望用户可以使用这种格式简单的完成数据格式的定义自己的数据同时满足需求,因此有如下格式定义:

注意:因为只是使用简单功能format格式并未做任何验证

package com.wugui.datax.etl.utils;import java.text.SimpleDateFormat;import java.util.*;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** 【JSimpleDateFormat用于分区修改的特殊操作】** @author * @since 0831 20:49:07*/public class JSimpleDateFormat {private static final String BRACES = "[{}]";private static final String YEAR = "yyyy";private static final String MONTH = "MM";private static final String DAY = "dd";private static final String HOUR = "HH";private static final String MINUTE = "mm";private static final String SECOND = "ss";private static final String YEAR_PATTERN = "(?<year>\\{yyyy:\\d+}|\\{yyyy-\\d+}|\\{yyyy+\\d+})";private static final String MONTH_PATTERN = "(?<month>\\{MM:\\d+}|\\{MM-\\d+}|\\{MM+\\d+})";private static final String DAY_PATTERN = "(?<day>\\{dd:\\d+}|\\{dd-\\d+}|\\{dd+\\d+})";private static final String HOUR_PATTERN = "(?<hour>\\{HH:\\d+}|\\{HH-\\d+}|\\{HH+\\d+})";private static final String MINUTE_PATTERN = "(?<minute>\\{mm:\\d+}|\\{mm-\\d+}|\\{mm+\\d+})";private static final String SECOND_PATTERN = "(?<second>\\{ss:\\d+}|\\{ss-\\d+}|\\{ss+\\d+})";private String pattern = null;private Calendar calendar = null;/*** 使用方式 String format = new JSimpleDateFormat("yyyy{MM:03}{dd-12}0830").format();* * @author * @since /09/01 15:21* @param format* @return null*/public JSimpleDateFormat(String format) {// 获取当前时间Date currDateTime = new Date();// 构建日期对象Calendar calendar = Calendar.getInstance();// 初始化日期对象时间calendar.setTime(currDateTime);Map<String, String> kvPair = new HashMap<>();kvPair.put("year", YEAR_PATTERN);kvPair.put("month", MONTH_PATTERN);kvPair.put("day", DAY_PATTERN);kvPair.put("hour", HOUR_PATTERN);kvPair.put("minute", MINUTE_PATTERN);kvPair.put("second", SECOND_PATTERN);List<String> strings = Arrays.asList("year", "month", "day", "hour", "minute", "second");String pattern = format;for (String moss : strings) {pattern = buildFormat(calendar, pattern, kvPair.get(moss), moss);}this.pattern = pattern;this.calendar = calendar;}/*** 伪格式化** @author * @since /09/01 15:24* @return java.lang.String*/public String format(){return new SimpleDateFormat(pattern).format(this.calendar.getTime());}/*** 构造最终的format格式串** @param calendar Calendar* @param format String* @param pattern String* @return java.lang.String* @author * @since /09/01 14:40*/protected String buildFormat(Calendar calendar, String format, String pattern, String moss) {Pattern compile = pile(pattern);Matcher matcher = compile.matcher(format);String resPattern = format;if (matcher.find()) {String ms = matcher.group(moss);switch (moss) {case "year":resPattern = overwriteYear(calendar, format, ms);break;case "month":resPattern = overwriteMonth(calendar, format, ms);break;case "day":resPattern = overwriteDay(calendar, format, ms);break;case "hour":resPattern = overwriteHour(calendar, format, ms);break;case "minute":resPattern = overwriteMinute(calendar, format, ms);break;case "second":resPattern = overwriteSecond(calendar, format, ms);break;}}return resPattern;}/*** 去除字符串中的{}特殊字符** @param src 原始字符串{yyyy-1}* @return java.lang.String* @author * @since /09/01 13:13*/protected String removeBraces(String src) {return src.replaceAll(BRACES, "");}/*** 重写年份 calendar 对象已及回传年份的format格式** @param calendar Calendar* @param format String* @param yearString* @return java.lang.String* @author * @since /09/01 13:14*/protected String overwriteYear(Calendar calendar, String format, String year) {String resYear = format;String formatYear = removeBraces(year);if (formatYear.contains("-")) {String reduce = formatYear.split("-")[1];calendar.add(Calendar.YEAR, -Integer.parseInt(reduce));resYear = format.replace(year, YEAR);} else if (formatYear.contains("+")) {String add = formatYear.split("-")[1];calendar.add(Calendar.YEAR, Integer.parseInt(add));resYear = format.replace(year, YEAR);} else if (formatYear.contains(":")) {String yyyy = formatYear.split(":")[1];resYear = format.replace(year, yyyy);}return resYear;}/*** 重写月份 calendar 对象已及回传月份的format格式** @param calendar Calendar* @param format String* @param month String* @return java.lang.String* @author * @since /09/01 13:15*/protected String overwriteMonth(Calendar calendar, String format, String month) {String resMonth = format;String formatMonth = removeBraces(month);if (formatMonth.contains("-")) {String reduce = formatMonth.split("-")[1];calendar.add(Calendar.MONTH, -Integer.parseInt(reduce));resMonth = format.replace(month, MONTH);} else if (formatMonth.contains("+")) {String add = formatMonth.split("-")[1];calendar.add(Calendar.MONTH, Integer.parseInt(add));resMonth = format.replace(month, MONTH);} else if (formatMonth.contains(":")) {String MM = formatMonth.split(":")[1];resMonth = format.replace(month, MM);}return resMonth;}/*** 重写DAY calendar 对象已及回传DAY的format格式** @param calendar Calendar* @param format String* @param dayString* @return java.lang.String* @author * @since /09/01 13:15*/protected String overwriteDay(Calendar calendar, String format, String day) {String resDay = format;String formatDay = removeBraces(day);if (formatDay.contains("-")) {String reduce = formatDay.split("-")[1];calendar.add(Calendar.DAY_OF_MONTH, -Integer.parseInt(reduce));resDay = format.replace(day, DAY);} else if (formatDay.contains("+")) {String add = formatDay.split("-")[1];calendar.add(Calendar.DAY_OF_MONTH, Integer.parseInt(add));resDay = format.replace(day, DAY);} else if (formatDay.contains(":")) {String MM = formatDay.split(":")[1];resDay = format.replace(day, MM);}return resDay;}/*** 重写HOUR calendar 对象已及回传HOUR的format格式** @param calendar Calendar* @param format String* @param hourString* @return java.lang.String* @author * @since /09/01 13:15*/protected String overwriteHour(Calendar calendar, String format, String hour) {String resHour = format;String formatHour = removeBraces(hour);if (formatHour.contains("-")) {String reduce = formatHour.split("-")[1];calendar.add(Calendar.HOUR_OF_DAY, -Integer.parseInt(reduce));resHour = format.replace(hour, HOUR);} else if (formatHour.contains("+")) {String add = formatHour.split("-")[1];calendar.add(Calendar.HOUR_OF_DAY, Integer.parseInt(add));resHour = format.replace(hour, HOUR);} else if (formatHour.contains(":")) {String HH = formatHour.split(":")[1];resHour = format.replace(hour, HH);}return resHour;}/*** 重写MINUTE calendar 对象已及回传MINUTE的format格式** @param calendar Calendar* @param format String* @param minute String* @return java.lang.String* @author * @since /09/01 13:15*/protected String overwriteMinute(Calendar calendar, String format, String minute) {String resMinute = format;String formatMinute = removeBraces(minute);if (formatMinute.contains("-")) {String reduce = formatMinute.split("-")[1];calendar.add(Calendar.MINUTE, -Integer.parseInt(reduce));resMinute = format.replace(minute, MINUTE);} else if (formatMinute.contains("+")) {String add = formatMinute.split("-")[1];calendar.add(Calendar.MINUTE, Integer.parseInt(add));resMinute = format.replace(minute, MINUTE);} else if (formatMinute.contains(":")) {String mm = formatMinute.split(":")[1];resMinute = format.replace(minute, mm);}return resMinute;}/*** 重写SECOND calendar 对象已及回传SECOND的format格式** @param calendar Calendar* @param format String* @param second String* @return java.lang.String* @author * @since /09/01 13:15*/protected String overwriteSecond(Calendar calendar, String format, String second) {String resSecond = format;String formatSecond = removeBraces(second);if (formatSecond.contains("-")) {String reduce = formatSecond.split("-")[1];calendar.add(Calendar.SECOND, -Integer.parseInt(reduce));resSecond = format.replace(second, SECOND);} else if (formatSecond.contains("+")) {String add = formatSecond.split("-")[1];calendar.add(Calendar.SECOND, Integer.parseInt(add));resSecond = format.replace(second, SECOND);} else if (formatSecond.contains(":")) {String ss = formatSecond.split(":")[1];resSecond = format.replace(second, ss);}return resSecond;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。