Date
Date
날짜를 다루는 struct와 함수들을 제공하는 모듈이에요. Date struct는 year, month, day, calendar 필드를 가지고 있어요. 새 날짜는 new/3 함수로 만들거나 ~D 시길(시길에 대한 설명은 sigil_D/2 참고)로 만들 수 있어요.
iex> ~D[2000-01-01]
~D[2000-01-01]
new/3과 시길 모두 날짜 필드에 직접 접근할 수 있는 struct를 반환해요.
iex> date = ~D[2000-01-01]
iex> date.year
2000
iex> date.month
1
출처: Date
본문
이 모듈의 함수들은 Date struct는 물론, NaiveDateTime이나 DateTime처럼 Date struct와 같은 필드를 가진 어떤 struct와도 동작해요. 그런 함수들은 타입스펙에서 Calendar.date/0를 기대합니다(t/0 대신).
개발자라면 Date struct를 직접 만들기보다, 이 모듈이 제공하는 함수나 서드파티 달력 라이브러리의 함수를 활용하는 걸 권장해요.
날짜 비교하기(Comparing dates)
==/2, >/2, </2 같은 Elixir의 비교는 구조적(structural)이며 Date struct 필드를 기준으로 해요. 날짜를 제대로 비교하려면 compare/2, after?/2, before?/2 함수를 사용하세요. 이 모듈에 compare/2 함수가 있다는 점 덕분에, Enum.min/2과 Enum.max/2를 써서 Enum에서 최소·최대 날짜를 구할 수도 있어요. 예:
iex> Enum.min([~D[2017-03-31], ~D[2017-04-01]], Date)
~D[2017-03-31]
에포크(epoch) 활용하기(Using epochs)
add/2, diff/2, shift/2 함수는 날짜를 계산하거나 시점(instant) 사이의 일수를 구할 때 쓸 수 있어요. 예를 들어 Unix 에포크(1970-01-01)로부터의 일수를 계산한다고 해 봅시다.
iex> Date.diff(~D[2010-04-17], ~D[1970-01-01])
14716
iex> Date.add(~D[1970-01-01], 14_716)
~D[2010-04-17]
iex> Date.shift(~D[1970-01-01], year: 40, month: 3, week: 2, day: 2)
~D[2010-04-17]
이 함수들은 위의 Unix 에포크나 그레고리오 에포크(0000-01-01) 같은 흔한 에포크를 다루도록 최적화되어 있어요.
Summary(요약)
Types
t()
Functions
add(date, days)— 주어진date에 일수(days)를 더해요.after?(date1, date2)— 첫 날짜가 둘째 날짜보다 엄격히 나중이면true를 반환해요.before?(date1, date2)— 첫 날짜가 둘째 날짜보다 엄격히 이르면true를 반환해요.beginning_of_month(date)— 주어진date의 그 달 첫 날을 계산해요.beginning_of_week(date, starting_on \\\\ :default)— 주어진date의 그 주 첫 날을 계산해요.compare(date1, date2)— 두 날짜 struct를 비교해요.convert(date, calendar)— 주어진date를 현재 달력에서 주어진calendar로 변환해요.convert!(date, calendar)—Date.convert/2와 비슷하지만, 두 달력 간 변환이 불가능하면ArgumentError를 던져요.day_of_era(date)— 주어진 달력date의 day-of-era와 era를 계산해요.day_of_week(date, starting_on \\\\ :default)— 주어진date의 주중 서수(ordinal) 요일을 계산해요.day_of_year(date)— 주어진date의 연중 일수를 계산해요.days_in_month(date)— 주어진date의 달에 있는 일수를 반환해요.diff(date1, date2)— 두 날짜 사이의 차이를 온전한 일수로 계산해요.end_of_month(date)— 주어진date의 그 달 마지막 날을 계산해요.end_of_week(date, starting_on \\\\ :default)— 주어진date의 그 주 마지막 날을 계산해요.from_erl(tuple, calendar \\\\ Calendar.ISO)— Erlang 날짜 튜플을Datestruct로 변환해요.from_erl!(tuple, calendar \\\\ Calendar.ISO)— Erlang 날짜 튜플을 변환하되, 유효하지 않은 날짜면 예외를 던져요.from_gregorian_days(days, calendar \\\\ Calendar.ISO)— 그레고리오 일수를Datestruct로 변환해요.from_iso8601(string, calendar \\\\ Calendar.ISO)— ISO 8601:2019에 기술된 확장 "Dates" 형식을 파싱해요.from_iso8601!(string, calendar \\\\ Calendar.ISO)— ISO 8601:2019 "Dates" 형식을 파싱하되, 실패 시 예외를 던져요.leap_year?(date)— 주어진date의 연도가 윤년이면true를 반환해요.months_in_year(date)— 주어진date의 연도의 달 수를 반환해요.new(year, month, day, calendar \\\\ Calendar.ISO)— 새 ISO 날짜를 만들어요.new!(year, month, day, calendar \\\\ Calendar.ISO)— 새 ISO 날짜를 만들되, 실패 시 예외를 던져요.quarter_of_year(date)— 주어진date의 연중 분기(quarter)를 계산해요.range(first, last)— 날짜 범위를 반환해요.range(first, last, step)— 스텝(step)이 있는 날짜 범위를 반환해요.shift(date, duration)— 주어진date를 해당 달력에 따라duration만큼 이동시켜요.to_erl(date)— 주어진date를 Erlang 날짜 튜플로 변환해요.to_gregorian_days(date)—datestruct를 그레고리오 일수로 변환해요.to_iso8601(date, format \\\\ :extended)— 주어진date를 ISO 8601:2019 형식으로 변환해요.to_string(date)— 주어진 날짜를 해당 달력에 따라 문자열로 변환해요.utc_today(calendar \\\\ Calendar.ISO)— 현재 UTC 날짜를 반환해요.year_of_era(date)— 주어진 달력 연도의 year-of-era와 era를 계산해요.