/**
* 利用Calendar的add方法来动态设置时间,在指定时间提前或者推迟的功能
* msgTimeConfig: {1: "y", 2: "M", 5: "d", 10: "h", 12: "m", 13: "s"}
* msgTimeConfig可以根据Calendar中支持的field自己拓展
*
* @param calendar 日历实例
* @param timeConfig 类似 -1y2M3d4h5m6s
*/
private void setCalender(Calendar calendar, String timeConfig) {
if (Constants.SEND_TIME_DEFAULT.equals(timeConfig)) {
return;
}
boolean isMinusNum = timeConfig.startsWith(StringPool.DASH);
String finalTimeConfig = (isMinusNum ? timeConfig.substring(1) : timeConfig).trim();
int baseNum = isMinusNum ? -1 : 1;
Map<Integer, String> keyIndexMap = msgTimeConfig.values().stream()
.filter(finalTimeConfig::contains)
.collect(Collectors.toMap(finalTimeConfig::indexOf, key -> key));
List<Integer> keyIndexList = keyIndexMap.keySet().stream().sorted().collect(Collectors.toList());
Function<String, Integer> matchValueFunc = (matchKey) -> {
int indexOfKeyInConfig = finalTimeConfig.indexOf(matchKey);
if (indexOfKeyInConfig == -1) {
return null;
}
int indexOfKeyInList = keyIndexList.indexOf(indexOfKeyInConfig);
int subStartIndex = 0;
if (indexOfKeyInList > 0) {
int indexOfPreKeyInConfig = keyIndexList.get(indexOfKeyInList - 1);
subStartIndex = indexOfPreKeyInConfig + keyIndexMap.get(indexOfPreKeyInConfig).length();
}
return Integer.parseInt(finalTimeConfig.substring(subStartIndex, indexOfKeyInConfig));
};
msgTimeConfig.forEach((fieldNumber, matchKey) -> {
Integer timeVal = matchValueFunc.apply(matchKey);
if (null != timeVal) {
calendar.add(fieldNumber, timeVal * baseNum);
}
});
}
版权声明:本文为xufexi115原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。