[DAY23] java_util_Date, 문제풀이(DayofWeek)

NA YE SOM·2023년 7월 31일
0
post-thumbnail

ex02_java_util_Date

util 의 값을 가지고

Date() : 현재 날짜를 date로 빼달라
Date(long date) : 해당 Timestamp 날짜를 반환

24 x 60 x60 = 8240000


-> utc 로 바꾸면 0시
우리나라 ) 국제 표준 + 9 임

ex03_java_sql_Date

oracle에 date라는 타입 있었음

-> oracle date 읽어드릴때) java의 sql.Date로 읽어라(DB의 데이터타입을 읽기)


(두번째 / 사선 쓰지말라는것)

long타입의 date -> TIMESTAMP



-> 오라클에서는 날짜 구분 ( / , -) - 2가지
-> 자바 (-) 하이픈

DB에 읽는걸 읽어야 겠다 -> Sql쓰기
패키지 존재 이유 : 같은 이름의 클래스를 구분하기 위해서이다.

Ex04_SimpleDateFormat 형식 바꾸는 방법

★★ 날짜, 시간 형식 잘 정리하기!(계속 이걸로 씀)(패턴이 중요!)



-> 오라클은 대소문자 구분 x : MI 따로 함

-> 오라클은
HH 12시각제

HH 24시각제 로 했음


-> util의 데이터를 (가로)안이 비어있을 수 있음(오늘시간이됨)
-> sql 써도 됨


-> 패턴을 전달하는 방법


-> 오전, 오후 표기 (hh 12시각제 씀)

-> (약식으로) 합쳐서 적는방법

★ java.sql.Date 제일 많이씀


-> 나머지는 그냥 넘어가도 됨

(ex03)java_sql 다시가서)


-> long itme도 timestamp임


-> 1000분의 1초까지 확인가능


ex05_Calendar


-> 시간만 필요하다 , 날짜만 필요하다 등 원하는 일부 데이터만 가져다 쓸때


get + instance -> 객체가져오기

특정지역의 시간대를 가져와서 처리가능(현재는 우리나라 기준)

INSTANCE는 만들어두고 우리는 가져다쓰기만 하는것 -> 일종의 Getter임

-> 사람들이 숫자를 일일히 외위지x


-> 년도 필요하면 요청하면 됨

-> 클래스 변수
클래스 이름으로 부르려고 static

0~11월로 나오니까 주의하기

7월달에 31번째 날 -> Day_OF_MONTH

일요일 -> 시작 요일

-> 3시인지? 15시인지?




-> util의 date준비


-> 작년 이 맘때쯤의 timestamp값

★ 요즘에 나오는 애들(사용법 간단함)

LocalDateTime



-> new안하고 () 호출만 하면 나옴

calendar month는 숫자가 하나 적었지만 여기는 그럴 필요 x


-> 문자열로 전달해주는 아이도 있구나

기본패턴 ( 년도 - month - day) => 4자리, 2자리, 2자리

ex02

ex03 날짜와 시간 둘다 처리 하는것

ex04 DateTimeFormatter : 원하는 형식, 패턴 지정하기

simpledatetype과 같은 역할을 함

localdatetime쓰면 data처럼 dateformat지정해서 형식도 제공할 수 있고 (모든걸 다 하고싶은 class)


sql. date와 sql.timestamp는 util.date의 자식들이다
오버라이드 해놓은 것
(java util클래스의 wrapper 클래스 타입으로 'sql.date'와 'sql.Timestamp'가 있음)

ex04_Scanner(웹 개발가면 쓰지 x -> 학습용으로만 씀)


사용자 입력 정보에 초점을 맞추겠음
파일 입력 -> 따로 빼서 배울것


-> ★★ 입력 스트림(InputStream) 중요함!



-> close안해도 상관x

입력 : 직접 타이핑하라는 것

콘솔창은 웹화면에서 입력하므로 자바 클래스에서만 scanner 쓸것

DayOfweek _ 2023년 7월 31일까지 구하기

<윤년의 조건>
1. 4로 나눠서 나머지 0 = 4의 배수
( 1988, 1992, 1996, ... 2020년 )
2.100으로 나눠서 나머지 0 이 아니어야 함 = 100의 배수는 윤년이 될 수 없음
-> y % 4 == 0 그리고 y % 100 != 0 (윤년)

또는

  1. 400으로 나눠서 나머지 0 = 400의 배수 -> 4, 100, 400의 배수
    ( 400, 800, 1200, 1600, 2000년)
    -> y % 400 == 0

  2. year 년 구하기
    -> 2022년까지 구하기 ( y < year ) ( < 부등호 중요)
    -> totalDay = 0부터 시작 (for문 증감식)
    -> if문) 윤년은 366일로 365일보다 하루 더 많음
    -> 만약 윤년이면 ) totalDay++
    *윤년 (4로 나눈 나머지가 0이고 100으로 나눠 나머지가 0이 아님)

  3. month 달 구하기
    -> 윤년이면 29일로 변경(lastDay.set(2,29))
    -> 1~6월달까지만 구하기( i < month )( < 부등호 중요)
    -> 이번달 : totalDay 는 그냥 day(일수)만 더해주면 됨

  4. week 요일 구하기
    -> 계산된 일수(totalDay)를 7로 나눈 나머지가 (인덱스 번호)이다.

400(이미 100으로 나눠떨어지는애들을 포함함)
if(( year % 4 == 0 그리고 year % 100 이 아니면 윤년) 또는
year % 400 == 0 (연수가 4,100,400으로 나누어 떨어지는 해는 윤년)

2022년까지
1월 ~ 6월은 이미 지남

365일이 지났다고 할 수 있는 건 : 2022년까지

-> 2022년 365일 더해줌

문제는 366일인값이 있더라 (하루 더 있는날)


-> 100으로 나눠서 나머지가 0이 되면 안됨
(1) + (2) 합치면


-> 연도 이용한 몇일 지났는지 계산하기!

(작년 12월 31일까지 몇일 지났는지 계산됨)


-> 인덱스 번호랑 끝나는날이랑 맞춤(


-> 2월달의 종료날이 29일때도 있다


-> 전달된 년도가 윤년이면

-> 2월달은 29일까지로 수정한다음에

작년 12월 31일까지는 날짜 계산 끝나고 올해 개월수만 보면 됨

온전하게 지난간 달은 1~6월까지임

month -1 or month보다 작을떄까지만

-> totalday에 다 더해주기


-> 6월달까지만 만듦

인덱스 시작을 1로 해도 상관x


-> 28은 상황에 따라서 29로 바뀌어있을수도 있음

7월 31일이라고 하면 6월까지 몇일지났는지 계산 끝남


-> 이번달은 지난거 더해주면 됨(고려할 것 없음)

totalday 계산된 일수

-> %7값을 인덱스로 바꿔주면 index 번호가 나오면서 답이 될 수 있음


-> 보여주는게 아니라 출력만 하면됨

Stirng.format 불러서
month, day는 2자리로 맞춰주기

profile
개발자 velog

0개의 댓글