Java๋ ๋ง์นจ๋ด ๋ ์ง์ ์๊ฐ์ ์ฒ๋ฆฌํ๋ ์ง๊ด์ ์ด๊ณ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. ๋ ์ง์ ์๊ฐ์ ์์น์ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๊ธฐ๋ณธ์
๋๋ค. ์๋
์์ผ, ๋์ฌ ๋ ์ง, ์ด๋ฒคํธ ์๊ฐ, ๋งค์ฅ ์์
์๊ฐ ๋ฑ ๋ค์ํ ์ฌํญ์ ๋ชจ๋ ๋ ์ง ๋ฐ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ง๋ง Java SE๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์์์ต๋๋ค. Java SE 8 ๋ถํฐ ๋ ์ง ๋ฐ ์๊ฐ ์์
์ ์ํ ์ ๊ตฌ์กฐํ๋ API๋ฅผ ์ ๊ณตํ๋ java.time ํจํค์ง ์ธํธ๊ฐ ์์์ต๋๋ค.
๋ค์์ ๊ตฌํ ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์์ ๋ชฉ๋ก์
๋๋ค.
๋ฐฐ๊ฒฝ
Java๊ฐ ์ฒ์ ์ถ์๋์์ ๋ ๋ฒ์ 1.0 ์์๋ ๋ ์ง ๋ฐ ์๊ฐ ์์ ์ ์ํ ์ ์ผํ ํด๋์ค๋ java.util.Date ์์ต๋๋ค . ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ๋จผ์ ์์์ฐจ๋ฆฐ ๊ฒ์ "๋ ์ง"๋ฅผ ๋ํ๋ด์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ด๋ 1970๋ 1์ 1์ผ๋ถํฐ ์ธก์ ๋ ๋ฐ๋ฆฌ์ด ๋จ์์ ์ ํํ ์๊ฐ์ ๋ํ๋ ๋๋ค. ๊ทธ๋ฌ๋ Date ์ toString() ๋ฉ์๋๊ฐ ์์คํ ์ Java ์ค์ ์ ์ง์ ๋ ์๊ฐ๋์ ๋ ์ง์ ์๊ฐ์ ํ์ํ๋ค๋ ์ฌ์ค์ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ ๊ฐ๋ฐ์๋ Date๊ฐ ์๊ฐ๋์ ์๋ํ ์ ์๋ค๊ณ ์๋ชป ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค. ์ด ํด๋์ค๋ฅผ ์์ ํ๋ ๊ฒ์ ๋๋ฌด ์ด๋ ค์ด(๋๋ ๋๋ฌด ๊ฒ์ผ๋ฅธ) ๊ฒ์ผ๋ก ํ๋ช ๋์ด ๋ฒ์ 1.1 ์์๋ ์๋ก์ด ํด๋์ค์ธ java.util.Calendar ๋ฅผ ์ถ๊ฐํด์ผ ํ์ต๋๋ค . ๋ถํํ๊ฒ๋ Calendar ํด๋์ค๋ Date ํด๋์ค ๋ณด๋ค ๋ณ๋ก ์ข์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค .- ๋ณํ๊ธฐ ์ฌ์ด. ๋ ์ง ๋ฐ ์๊ฐ๊ณผ ๊ฐ์ ํด๋์ค๋ ๋ณ๊ฒฝํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์คํ์ . ๋ ์ง์ ์ฐ๋๋ 1900๋ ๋ถํฐ ์์ํ๊ณ ๋ ํด๋์ค์ ์์ 0๋ถํฐ ์์ํฉ๋๋ค.
- ์ด๋ฆ. Date๋ ์ค์ ๋ก "๋ ์ง"๊ฐ ์๋๋ฉฐ Calendar๋ ๋ฌ๋ ฅ์ด ์๋๋๋ค.
- ํฌ๋งท. ํ์ ์ง์ ์ ๋ฌ๋ ฅ์ด ์๋ ๋ ์ง์์๋ง ์๋ํ๋ฉฐ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ต๋๋ค.
๊ฒํ
์๋ก์ด java.time API์๋ 5๊ฐ์ ํจํค์ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.- java.time - ๊ฐ์ ์ ์ฅํ ๊ฐ์ฒด๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ ํจํค์ง
- java.time.chrono - ๋ค์ํ ๋ฌ๋ ฅ์ ๋ํ ์ก์ธ์ค ์ ๊ณต
- java.time.format - ๋ ์ง ๋ฐ ์๊ฐ ํ์ ์ง์ ๋ฐ ์ธ์
- java.time.temporal - ํ์ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ณ ๊ธ ๊ธฐ๋ฅ
- java.time.zone - ์๊ฐ๋ ์์ ์ ์ํ ํด๋์ค
๋ ์ง
LocalDate ํด๋์ค๋ ์ API ์์ ๊ฐ์ฅ ์ค์ํ ํด๋์ค ์ค ํ๋์ ๋๋ค . ์ฌ๊ธฐ์๋ ๋ ์ง๋ฅผ ๋ํ๋ด๋ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์๊ฐ์ด๋ ์๊ฐ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. "local"์ด๋ผ๋ ์ด๋ฆ์ Joda-Time ์์ ์ต์ํ ์ ์์ผ๋ฉฐ ์๋๋ ISO-8601 ํ์ค ์์ ์ ๋๋์์ต๋๋ค . ์ด๋ ์ ํํ ์๊ฐ๋๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก LocalDate๋ "2014๋ 4์ 5์ผ"๊ณผ ๊ฐ์ ๋ ์ง์ ๋ํ ์ค๋ช ์ ๋๋ค. ์ด ๋ ์ง์ ์ค์ ์๊ฐ์ ์๊ฐ๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด, ํธ์ฃผ์์๋ ์ด ๋ ์ง๊ฐ ๋ฐ๋๋ณด๋ค 10์๊ฐ ๋น ๋ฅด๋ฉฐ ์ํ๋์์ค์ฝ๋ณด๋ค 18์๊ฐ ๋น ๋ฆ ๋๋ค. LocalDate ํด๋์ค ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๋ชจ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค.LocalDate date = LocalDate.of(2014, Month.JUNE, 10); int year = date.getYear(); // 2014 Month month = date.getMonth(); // ะัะฝั int dom = date.getDayOfMonth(); // 10 DayOfWeek dow = date.getDayOfWeek(); // ะัะพัะฝะธะบ int len = date.lengthOfMonth(); // 30 (ะดะฝะตะน ะฒ ะัะฝะต) boolean leap = date.isLeapYear(); // false (ะฝะต ะฒะธัะพะบะพัะฝัะน ะณะพะด)
์ด ์์์๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ ์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค(๋ชจ๋ ์์ฑ์๋ ๋น๊ณต๊ฐ์
๋๋ค). ๋ค์์ผ๋ก ๊ฐ์ฒด์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
Month ๋ฐ
DayOfWeek ์ด๊ฑฐํ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์์ ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค . ๋ค์ ์์์๋ ๋ ์ง๋ฅผ ์์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํด๋์ค๋ ๋ถ๋ณ์ด๋ฏ๋ก ๊ฒฐ๊ณผ๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋์ง๋ง ์๋ณธ ๊ฐ์ฒด๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.withYear(2015); // 2015-06-10 date = date.plusMonths(2); // 2015-08-10 date = date.minusDays(1); // 2015-08-09
์ด๋ ์๋์ ์ผ๋ก ๊ฐ๋จํ ๋ณ๊ฒฝ์ด์ง๋ง ๋ ๋ณต์กํ ๋ ์ง ์์ ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
java.time API ์๋ ์ด๋ฅผ ์ํ ํน๋ณํ ๋ฉ์ปค๋์ฆ์ธ TemporalAdjuster๊ฐ ์์ต๋๋ค . ๊ทธ ๋ชฉ์ ์ ๋ ์ง๋ฅผ ์กฐ์ํ ์ ์๋ ๋ด์ฅ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ํด๋น ์์ ๋ง์ง๋ง ๋ ์ ํด๋นํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์
๋๋ค.
๊ทธ ์ค ์ผ๋ถ๋ API ์ ํฌํจ๋์ด ์์ง๋ง ์ง์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. ์์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ง๋ง ์ ์ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
import static java.time.DayOfWeek.* import static java.time.temporal.TemporalAdjusters.* LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.with(lastDayOfMonth()); date = date.with(nextOrSame(WEDNESDAY));
์์ ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ํฌ๊ฒ ๋จ์ํ๋ฉ๋๋ค. ์๋์ผ๋ก ๋ ์ง๋ฅผ ์กฐ์ํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ดํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ํ๋ก์ ํธ์์ ์ผ์ข
์ ๋ ์ง ์กฐ์์ด ์ฌ๋ฌ ๋ฒ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๊ณ ์ ํ ์์ ์๋ฅผ ์์ฑํ๋ฉด ํ์์ ์ด๋ฅผ ์ด๋ฏธ ์์ฑ๋๊ณ ํ
์คํธ๋ ๊ตฌ์ฑ ์์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
GO TO FULL VERSION