본문 바로가기

Java

[ Java ] Crontab 기능 구현

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));		
}

'Java' 카테고리의 다른 글

[ Java ] CSV 읽기 기능 구현  (0) 2021.10.25
[ Java ] Swap 알고리즘 구현  (0) 2021.10.25