package ch.qos.logback.core.rolling; import java.util.Date; import java.util.GregorianCalendar; import ch.qos.logback.core.rolling.helper.RollingCalendar; public class SpecificTimeRollingCalendar extends RollingCalendar{ int rollHour=0; int rollMinute=0; public int getRollHour() { return rollHour; } public void setRollHour(int rollHour) { this.rollHour = rollHour; } public int getRollMinute() { return rollMinute; } public void setRollMinute(int rollMinute) { this.rollMinute = rollMinute; } @Override public Date getRelativeDate(Date now, int periods) { GregorianCalendar gc=new GregorianCalendar(this.getTimeZone()); gc.setTime(now); gc.set(GregorianCalendar.HOUR_OF_DAY, rollHour); gc.set(GregorianCalendar.MINUTE, rollMinute); gc.set(GregorianCalendar.SECOND, 0); gc.set(GregorianCalendar.MILLISECOND, 0); if(now.before(gc.getTime())){ return gc.getTime(); } Date newDay=super.getRelativeDate(now, periods); gc.setTime(newDay); gc.set(GregorianCalendar.HOUR_OF_DAY, rollHour); gc.set(GregorianCalendar.MINUTE, rollMinute); gc.set(GregorianCalendar.SECOND, 0); gc.set(GregorianCalendar.MILLISECOND, 0); return gc.getTime(); } }