public static void main(String[] args)
{
// year month day hour minute
String[] cron = "2021 11 3 2 12".split(" ");
scheduler(cron[0], cron[1], cron[2], cron[3], cron[4]);
}
public static void scheduler(String year, String month, String day, String hour, String minute)
{
Calendar calendar = Calendar.getInstance();
Date currentDate = calendar.getTime();
calendar.set(Calendar.SECOND, 0);
if(minute.equals("*"))
{
calendar.add(Calendar.MINUTE, 1);
}
else
{
calendar.set(Calendar.MINUTE, Integer.parseInt(minute));
}
if(hour.equals("*"))
{
if(calendar.getTime().getTime() <= currentDate.getTime())
{
calendar.add(Calendar.HOUR_OF_DAY, 1);
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
}
}
else
{
if(Integer.parseInt(hour) > calendar.get(Calendar.HOUR_OF_DAY))
{
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
}
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
}
if(day.equals("*"))
{
if(calendar.getTime().getTime() <= currentDate.getTime())
{
calendar.add(Calendar.DATE, 1);
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
}
}
else
{
if(Integer.parseInt(day) > calendar.get(Calendar.DATE))
{
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
}
calendar.set(Calendar.DATE, Integer.parseInt(day));
}
if(month.equals("*"))
{
if(calendar.getTime().getTime() <= currentDate.getTime())
{
calendar.add(Calendar.MONTH, 1);
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
if(day.equals("*"))
{
calendar.set(Calendar.DATE, 1);
}
}
}
else
{
if(Integer.parseInt(month) > calendar.get(Calendar.MONTH))
{
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
if(day.equals("*"))
{
calendar.set(Calendar.DATE, 1);
}
}
calendar.set(Calendar.MONTH, Integer.parseInt(month) - 1);
}
if(year.equals("*"))
{
if(calendar.getTime().getTime() <= currentDate.getTime())
{
calendar.add(Calendar.YEAR, 1);
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
if(day.equals("*"))
{
calendar.set(Calendar.DATE, 1);
}
if(month.equals("*"))
{
calendar.set(Calendar.MONTH, 0);
}
}
}
else
{
if(Integer.parseInt(year) > calendar.get(Calendar.YEAR))
{
if(minute.equals("*"))
{
calendar.set(Calendar.MINUTE, 0);
}
if(hour.equals("*"))
{
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
if(day.equals("*"))
{
calendar.set(Calendar.DATE, 1);
}
if(month.equals("*"))
{
calendar.set(Calendar.MONTH, 0);
}
}
calendar.set(Calendar.YEAR, Integer.parseInt(year));
}
Date scheduleDate = calendar.getTime();
System.out.println("current time : " + (new SimpleDateFormat("yyyy-MM-dd HH:mm")).format(currentDate));
System.out.println("next sceduler time : " + (new SimpleDateFormat("yyyy-MM-dd HH:mm")).format(scheduleDate));
}