본문 바로가기
Hello World/JAVA

JAVA - 조건문과 반복문을 사용한 EpochTime 현재 날짜, 시간 출력 [개발스터디 기몬]

by 기몬 2023. 3. 9.
728x90
반응형

public class EpochTimeExample6 {

	/*
	 * AC
	 * 0001-01-01 Monday
	 * 
	 * 1970-01-01 00:00:00 부터 경과시간 (Thursday)
	 * 
	 *  0  1  2  3  4  5  6 
	 *  일 월  화  수  목 금  토
	 * 
	 */
	
	public static void main(String[] args) {
		long epoch = System.currentTimeMillis()/1000 + 9*60*60;	// 한국시간 GMT+9 / UTC+9
		
		int year = 1970;
		long week = 4;				// (4 + epoch/60/60/24) %7;
		
		//for(;;) {
		while(true) {
			int dayOfYear = 365;
			if (year%4==0&&year%100!=0 || year%400==0)  // 윤년, 평년 계산 
				dayOfYear++;							// 윤년이라면 365 + 1
			
			int secondOfYear = dayOfYear*24*60*60;		// 
			
			if (epoch - secondOfYear >= 0) {  
				epoch -= secondOfYear;			
				week += dayOfYear;				
			}
			else
				break;
			
			year++;
		}
		/*
		 * 1   2    3   4   5   6   7   8   9   10  11  12
		 * 31  28   31  30  31  30  31  31  30  31  30  31
		 * 	   29
		 */
		
		int month = 0;		// 월 구하기
		
		for (int i=1; i<=12; i++) {		// 1년은 12달
			int dayOfMonth=switch (i) {	
			case 1, 3, 5,7,8,10,12 -> 31;
			case 4,6,9,11 ->30;
			case 2 -> {
				if(year%4==0 && year%100!=0 || year%400==0)	// 윤년, 평년일 때 2월
					yield 29;
				else 
					yield 28;
			}
			default -> 99;
			};
			
			int secondOfMonth = dayOfMonth*24*60*60;  
			if (epoch - secondOfMonth >= 0) {
				epoch -= secondOfMonth;
				week += dayOfMonth;
			}else {
				month = i;
				break;
			}
		}
			
		long day = epoch/60/60/24;	
		week += day;
		
		if (epoch - day*24*60*60 > 0)	
			day++;
		
		week =  week %7;			
		long hour = epoch/60/60%24;
		long minute = epoch/60%60;
		long second = epoch%60;
		
		char weekName = switch((int)week) {		// 요일
		case 0 -> '일';
		case 1 -> '월';
		case 2 -> '화';
		case 3 -> '수';
		case 4 -> '목';
		case 5 -> '금';
		case 6 -> '토';
		default -> 'X';
		};

		
		System.out.printf("%04d-%02d-%02d %c %02d:%02d:%02d\n", year, month, day, weekName, hour, minute, second);
		
	}

}

 


public class EpochTimeExample8 {

	/*
	 * AC
	 * 0001-01-01 Monday
	 * 
	 * 1970-01-01 00:00:00 부터 경과시간 (Thursday)
	 * 
	 *  0  1  2  3  4  5  6 
	 *  일 월  화  수  목 금  토
	 * 
	 */
	
	
	public static void main(String[] args) throws InterruptedException {
		System.out.println("\033[2J");
		
		for(;;) {
			System.out.println("\033[10;20H");
			System.out.println(getDateTime());
			Thread.sleep(500);
		}
	}
	

	
	public static String getDateTime() {
		long epoch = System.currentTimeMillis()/1000 + 9*60*60;	// 한국시간 GMT+9 / UTC+9
		
		int year = 1970;
		long week = 4;				// (4 + epoch/60/60/24) %7;
		
		//for(;;) {
		while(true) {
			int dayOfYear = 365;
			if (year%4==0&&year%100!=0 || year%400==0)  // 
				dayOfYear++;
			
			int secondOfYear = dayOfYear*24*60*60;
			
			if (epoch - secondOfYear >= 0) {
				epoch -= secondOfYear;
				week += dayOfYear;
			}
			else
				break;
			
			year++;
		}
		/*
		 * 1   2    3   4   5   6   7   8   9   10  11  12
		 * 31  28   31  30  31  30  31  31  30  31  30  31
		 * 	   29
		 */
		
		int month = 0;
		
		for (int i=1; i<=12; i++) {
			int dayOfMonth=switch (i) {
			case 1, 3, 5,7,8,10,12 -> 31;
			case 4,6,9,11 ->30;
			case 2 -> {
				if(year%4==0 && year%100!=0 || year%400==0)
					yield 29;
				else 
					yield 28;
			}
			default -> 99;
			};
			
			int secondOfMonth = dayOfMonth*24*60*60; 
			if (epoch - secondOfMonth >= 0) {
				epoch -= secondOfMonth;
				week += dayOfMonth;
			}else {
				month = i;
				break;
			}
		}
			
		long day = epoch/60/60/24;	
		week += day;
		
		if (epoch - day*24*60*60 > 0)
			day++;
		
		week =  week %7;
		long hour = epoch/60/60%24;
		long minute = epoch/60%60;
		long second = epoch%60;
		
		char weekName = switch((int)week) {
		case 0 -> '일';
		case 1 -> '월';
		case 2 -> '화';
		case 3 -> '수';
		case 4 -> '목';
		case 5 -> '금';
		case 6 -> '토';
		default -> 'X';
		};

		
		return String.format("%04d-%02d-%02d %c %02d:%02d:%02d", 
									year, month, day, weekName, 
									hour, minute, second);
		
	}

}
728x90
반응형

댓글