Festivais como o Dia dos Pais e o Dia das Mães podem ser calculados, ou podem ser definidos como a melhor sexta -feira de cada mês para facilitar o arranjo de reuniões.
A cópia do código é a seguinte:
/**
*
* @param strdate
* Data de início, formato aaaaa-mm-dd hh: mm: ss
* @param CyclePriod
* Intervalo repetido
* @param loopPriod
* Repita o tipo, m = mês, d = dia, y = ano, w = semana, h = hora, f = minuto, s = segundo
* mn = que dia é o dia positivo do mês, mb = que dia é o último dia do mês, se o MB2 for o segundo dia do último
* w1..7 = que dia de cada semana, mn1w2 = a primeira semana do mês, mb2w4 = a segunda quinta -feira do mês
* O valor após w pode ser multi-values, W135 representa a semana 1, semana 3 e sexta-feira
* @param islunar
* Seja um calendário lunar, o valor passado deve ser um calendário solar, e o calendário gregoriano retornado ainda é o calendário solar após o cálculo de acordo com o calendário lunar. Atualmente, o calendário lunar possui cálculos diferentes por meses e anos.
* @retornar
*/
String estática pública na próxima hora (string strdate, int cyclepriod,
String looppriod, boolean islunar) {
String returnValue = "";
int [] datas = dateUtils.Gendate (strDate);
Chinesecalendar ccalendar = new chinesecalendar ();
ccalendar.setGregRianYear (datas [0]);
ccalendar.setGregorianMonth (datas [1]);
ccalendar.setGregrendate (datas [2]);
if ("m" .EqualSignorecase (loopPriod)) // Processe o mês
{
if (islunar) {
for (int i = 0; i <cicloPriod; i ++) {
ccalendar.nextchinesemonth ();
}
returnValue = dateUtils.GENDATE (ccalendar.getGregionianyear (),
ccalendar.getGregionMonth (),
ccalendar.getGregRandate ());
} outro {
returnValue = dateUtils.caldate (strdate, CyclePriod, 2);
}
} else if ("d" .equalsignorecase (looppriod)) // Dia do processamento
{
returnValue = dateUtils.caldate (strdate, CyclePriod, 5);
} else if ("y" .equalsignorecase (looppriod)) // ano de processo
{
if (islunar) {
ccalendar.addchineseyear (CyclePriod);
returnValue = dateUtils.GENDATE (ccalendar.getGregionianyear (),
ccalendar.getGregionMonth (),
ccalendar.getGregRandate ());
} outro {
returnValue = dateUtils.caldate (strdate, CyclePriod, 1);
}
} else if ("w" .equalsignorecase (looppriod)) // Semana de processamento
{
returnValue = dateUtils.caldate (strdate, CyclePriod, 3);
} else if ("h" .equalsignorecase (looppriod)) // horário de processamento
{
returnValue = timeUtils.addtime (strdate, 0, CyclePriod);
} else if ("f" .equalsignorecase (looppriod)) // atas de processamento
{
returnValue = timeUtils.addtime (strdate, 1, CyclePriod);
} else if ("s" .equalsignorecase (looppriod)) // Processar segundos
{
returnValue = timeUtils.addtime (strdate, 2, CyclePriod);
} else // lida com ciclos não convencionais
{
if ("m" .EqualSignorecase (stringutils.left (looppriod, 1))) {
String mnb = looppriod.substring (1, 2);
String wnb = "";
int mnbvalue = 0;
int wnbvalue = 0;
if (looppriod.indexof ("w")> 1) {
wnb = looppriod.substring (looppriod.indexof ("w") + 1,
looppriod.indexOf ("w") + 2);
mnbvalue = Integer.parseint (looppriod.substring (2,
looppriod.indexOf ("w")));
wnbvalue = Integer.parseint (looppriod.substring (
looppriod.indexOf ("w") + 1, looppriod.length ()));
if ("n" .EqualSignorecase (MNB)) {
returnValue = getBeforeWeekday (strdate, mnbValue,
wnbvalue);
} else if ("b" .equalsignorecase (mnb)) {
returnValue = getbackweekday (strdate, mnbvalue,
wnbvalue);
}
} outro {
mnbvalue = Integer.parseint (looppriod.substring (2,
loopPriod.Length ())) - 1;
if ("n" .EqualSignorecase (MNB)) {
returnValue = Caldate (GIVEMENTHFIRST (STRDATE),
mnbvalue, 5);
} else if ("b" .equalsignorecase (mnb)) {
returnValue = Caldate (GIVEMENTHLAST (STRDATE),
-mnbvalue, 5);
}
}
} else if ("w" .equalsignorecase (stringutils.left (looppriod, 1))) {
String week = stringUtils.right (loopPriod,
loopPriod.Length () - 1);
strdate = caldate (strdate, CyclePriod - 1, 3);
while (true) {
strdate = caldate (strdate, 1, 5);
if (week.indexof (string.valueof (getweekday (strdate)))> = 0) {
returnValue = strdate;
quebrar;
}
}
}
}
return retornValue;
}