يمكن حساب المهرجانات مثل عيد الأب وعيد الأم ، أو يمكن تعريفها على أنها أفضل يوم جمعة من كل شهر لتسهيل ترتيب الاجتماعات.
نسخة الكود كما يلي:
/**
*
* param strdate
* تاريخ البدء ، تنسيق yyyy-mm-dd hh: mm: ss
* param cyclepriod
* كرر الفاصل
* param looppriod
* تكرار نوع ، m = الشهر ، d = اليوم ، y = سنة ، w = الأسبوع ، h = ساعة ، f = دقيقة ، s = ثانية
* mn = ما هو اليوم الإيجابي من الشهر ، mb = ما هو اليوم الأخير من الشهر ، إذا كان MB2 هو اليوم الثاني من الأخير
* W1..7 = في أي يوم من كل أسبوع ، Mn1w2 = الأسبوع الأول من الشهر ، MB2W4 = الخميس الثاني من الشهر
* يمكن أن تكون القيمة بعد w متعددة القيم ، ويمثل W135 الأسبوع 1 والأسبوع 3 والجمعة
* param Islunar
* سواء كان تقويمًا قمريًا ، يجب أن تكون القيمة التي تم تمريرها تقويمًا شمسيًا ، ولا يزال التقويم الغريغوري الذي تم إرجاعه هو التقويم الشمسي بعد الحساب وفقًا للتقويم القمري. حاليًا ، يتم إضافة تقويم القمر عن حسابات مختلفة لعدة أشهر.
* @يعود
*/
سلسلة ثابتة عامة في الوقت التالي (String Strdate ، Int CyclePriod ،
سلسلة looppriod ، منطقية Islunar) {
سلسلة returnValue = "" ؛
int [] dates = dateUtils.gendate (strdate) ؛
Chinesecalendar ccalendar = جديد chinesecalendar () ؛
ccalendar.setgreasorianyear (التواريخ [0]) ؛
ccalendar.setgreadianmonth (التواريخ [1]) ؛
ccalendar.setGregoriAndate (التواريخ [2]) ؛
إذا ("M"
{
إذا (islunar) {
لـ (int i = 0 ؛ i <cyclepriod ؛ i ++) {
ccalendar.nextchinesemonth () ؛
}
returnvalue = dateUtils.gendate (ccalendar.getgreianyear () ،
ccalendar.getgreadianmonth () ،
ccalendar.getGregoriAndate ()) ؛
} آخر {
returnvalue = dateUtils.Caldate (strdate ، cyclepriod ، 2) ؛
}
} آخر إذا ("d" .equalsignorecase (looppriod)) // يوم المعالجة
{
ReturnValue = dateUtils.Caldate (strdate ، cyclepriod ، 5) ؛
} آخر إذا ("y" .equalsignorecase (looppriod)) // سنة العملية
{
إذا (islunar) {
ccalendar.addchineseyear (CyclePriod) ؛
returnvalue = dateUtils.gendate (ccalendar.getgreianyear () ،
ccalendar.getgreadianmonth () ،
ccalendar.getGregoriAndate ()) ؛
} آخر {
returnvalue = dateUtils.Caldate (strdate ، cyclepriod ، 1) ؛
}
} آخر إذا ("w" .equalsignorecase (looppriod)) // أسبوع المعالجة
{
ReturnValue = dateUtils.Caldate (strdate ، cyclepriod ، 3) ؛
} آخر إذا ("H" .equalsignorecase (looppriod)) // ساعات المعالجة
{
returnValue = timeUtils.AddTime (strdate ، 0 ، cyclepriod) ؛
} آخر إذا ("f" .equalsignoreCase (looppriod)) // معالجة دقائق
{
returnValue = timeUtils.AddTime (strdate ، 1 ، cyclepriod) ؛
} آخر إذا ("s" .equalsignorecase (looppriod)) // Process Seconds
{
ReturnValue = timeUtils.AddTime (Strdate ، 2 ، CyclePriod) ؛
} آخر // التعامل مع دورات غير تقليدية
{
if ("M" .equalsInsInoreCase (StringUtils.left (looppriod ، 1))) {
سلسلة mnb = looppriod.substring (1 ، 2) ؛
سلسلة 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 = getBeforeweokday (Strdate ، mnbvalue ،
wnbvalue) ؛
} آخر إذا ("b" .equalsignorecase (mnb)) {
ReturnValue = getBackWeekday (Strdate ، Mnbvalue ،
wnbvalue) ؛
}
} آخر {
mnbvalue = integer.parseint (looppriod.substring (2 ،
looppriod.length ())) - 1 ؛
if ("n" .equalsignorecase (mnb)) {
returnvalue = caldate (givemonthfirst (strdate) ،
Mnbvalue ، 5) ؛
} آخر إذا ("b" .equalsignorecase (mnb)) {
returnvalue = caldate (givemonthlast (strdate) ،
-mnbvalue ، 5) ؛
}
}
} آخر إذا ("w" .equalsignorecase (stringUtils.left (looppriod ، 1))) {
أسبوع السلسلة = StringUtils.Right (Looppriod ،
looppriod.length () - 1) ؛
strdate = caldate (strdate ، cyclepriod - 1 ، 3) ؛
بينما (صحيح) {
strdate = caldate (strdate ، 1 ، 5) ؛
if (week.indexof (string.valueof (getWeekday (strdate)))> = 0) {
ReturnValue = strdate ؛
استراحة؛
}
}
}
}
إرجاع القيمة ؛
}