getTime(): 1970년 1월 1일 0시로부터 지난 시간을 나타냄
Date date = new Date();
long time = date.getTime();
1 ~ 100만까지 더하는데 걸리는 시간 출력
long p=0;
Date d1 = new Date(); //d1을 불러왔을 그 당시의 시간
for(long i =1;i<=1000000;i++)
{
p+=i;
}
Date d2 = new Date(); //d2를 불러올 당시의 시간
long time = d2.getTime() - d1.getTime();
System.out.println(time+"ms");
프로그램이 느리다 싶으면 이런식으로 date 객체들을 생성해서 시간을 체크해줘야합니다.
벤치마크(알고리즘이 얼마나 효율적인지 체크)
: 한 프로젝트에서 여러 기능을 개발하게 되는데 만약 속도가 느리면
어느부분에서 병목현상이 발생했는지 확인해야됩니다.
그럴때 date 를 이용해서 속도 체크 합니다
디비튜닝
: 보통 DB에서 쿼리 갖고올때 속도 차이가 많이 발생하기때문에
만약 느리면 DB 쿼리를 확인해보고 쿼리를 수정해야합니다
날짜 형식 맞추기
HH : 0~23
hh : 1~12
a : am/pm
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
System.out.println(str);
date → String → date 변환
public void method5() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str= ScanUtil.nextLine("날짜: ");
//TO_DATE
try {
Date date = sdf.parse(str);
System.out.println(date);
} catch (ParseException e) {
System.out.println("년-월-일 형식으로 하세요");
}
}
parse는 입력받을 때 형식을 다르게 할수도 있기 때문에 예외처리를 해줘야합니다.
오늘로부터 며칠 뒤는 어떤 날짜인지 출력
Date 사용해서 하기
public void method6() {
int days = ScanUtil.nextInt("며칠 뒤: ");
Date date = new Date();
Date date2 = new Date(date.getTime()+1000L*60*60*24*days); //int범위 벗어나서 L붙임
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
String str = sdf.format(date2);
System.out.println(str);
}
Calendar사용해서 하기
public void method2() {
int day = ScanUtil.nextInt("더할 날짜 입력: ");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, day);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = cal.getTime();
System.out.println(sdf.format(date));
}
오늘로부터 특정 날짜가 며칠 뒤인지 출력
public void method7() {
String str = ScanUtil.nextLine("날짜:");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
Date date;
try {
date = sdf.parse(str); //특정날짜 date로 형변환
Date cur = new Date(); //현재 날짜
long time = date.getTime() - cur.getTime();
long days = time/1000/60/60/24;
System.out.println(days);
} catch (ParseException e) {
System.out.println("날짜 형식 yyyy-mm-dd로 해주세요");
}
}
데이터 변경 set
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2028);
cal.set(Calendar.DATE, 1);
cal.set(Calendar.HOUR, 1);
현재 날짜 년도를 2028년으로, 일을 1일로, 시간을 한시로 설정
시간 더하기
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 100); //100일 뒤 날짜
cal.add(Calendar.HOUR,30); //30시간 뒤
cal.add(Calendar.DATE, -1); //전 날짜
현재 날짜에서 100일 뒤, 30시간 뒤의 전 날짜 출력
값가져오기
int day = cal.get(Calendar.DATE);
System.out.println(day);
Calendar → date
Date date = cal.getTime();
System.out.println(date);
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import kr.or.ddit.util.ScanUtil;
public class CalendarExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("연도를 입력하세요 (예: 2024): ");
int year = scanner.nextInt();
System.out.print("월을 입력하세요 (1-12): ");
int month = scanner.nextInt();
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1); // 월은 0부터 시작하므로 month - 1
while(true) {
if (month < 1 || month > 12) {
System.out.println("잘못된 월입니다. 1에서 12 사이의 값을 입력하세요.");
return;
}
// 첫 번째 날의 요일과 최대 일 수를 계산
int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int maxDayOfMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
// 현재 달을 출력하기 위한 SimpleDateFormat 객체를 생성
Date date = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(" yyyy년 MM월 ");
System.out.println("===================" + sdf.format(date) + "====================");
System.out.println("일\t월\t화\t수\t목\t금\t토");
System.out.println("===================================================");
// 첫 번째 날 이전의 공백을 출력
for (int i = 1; i < firstDayOfWeek; i++) {
System.out.print("\t");
}
// 달력 날짜를 출력
for (int day = 1; day <= maxDayOfMonth; day++) {
System.out.print(day + "\t");
if ((day + firstDayOfWeek - 1) % 7 == 0) {
System.out.println();
}
}
System.out.println();
String str = ScanUtil.nextLine("< 이전달 다음달 >");
if(str.equals("<")){
cal.add(Calendar.MONTH,-1);
}
if(str.contentEquals(">")) {
cal.add(Calendar.MONTH,1);
}
}
}
}
calendar클래스에서 월을 0~11까지 인덱스로 처리하기 때문에 1을 더해줘야함
> 입력하면 다음달로
< 입력하면 이전달로 넘어가기
'자바' 카테고리의 다른 글
collection (0) | 2024.07.26 |
---|---|
hash (0) | 2024.07.26 |
try-catch, throw Exception (2) | 2024.07.24 |
간단한 게시판 예제 (1) | 2024.07.24 |
인터페이스 (2) | 2024.07.24 |