Dates

Dates 모듈은 날짜 작업을 위한 두 가지 유형을 제공합니다: DateDateTime, 각각 일 및 밀리초 정밀도를 나타내며, 둘 다 추상 TimeType의 하위 유형입니다. 별도의 유형에 대한 동기는 간단합니다: 일부 작업은 더 높은 정밀도의 복잡성을 다루지 않아도 될 때 코드와 사고 측면에서 훨씬 간단해집니다. 예를 들어, 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 유형은 단일 날짜의 정밀도(즉, 시간, 분 또는 초가 없음)로만 해결되므로, 시간대, 일광 절약/여름 시간 및 윤초에 대한 일반적인 고려 사항이 필요 없고 피할 수 있습니다.

DateDateTime는 기본적으로 불변의 Int64 래퍼입니다. 두 타입의 단일 instant 필드는 실제로 UTInstant{P} 타입으로, UT 초를 기반으로 한 지속적으로 증가하는 기계 타임라인을 나타냅니다 [1]. 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 타입은 시간대에 대해 인식하지 않으며 (naive, 파이썬 용어로), 자바 8의 LocalDateTime에 비유할 수 있습니다. 추가적인 시간대 기능은 TimeZones.jl package를 통해 추가할 수 있으며, 이는 IANA time zone database를 컴파일합니다. 두 4d61726b646f776e2e436f64652822222c2022446174652229_407265664d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566ISO 8601 표준을 기반으로 하며, 이는 프로레프틱 그레고리력에 따릅니다. 한 가지 주의할 점은 ISO 8601 표준이 BC/BCE 날짜에 대해 특별하다는 것입니다. 일반적으로 BC/BCE 시대의 마지막 날인 1-12-31 BC/BCE는 1-1-1 AD/CE로 이어지므로, 0년은 존재하지 않습니다. 그러나 ISO 표준은 1 BC/BCE를 0년으로 간주하므로, 0000-12-310001-01-01의 하루 전이며, 연도 -0001(예, 연도에 대해 음수 1)은 2 BC/BCE, 연도 -0002는 3 BC/BCE 등입니다.

Constructors

DateDateTime 유형은 정수 또는 Period 유형으로 구성될 수 있으며, 파싱 또는 조정기를 통해 생성될 수 있습니다(조정기에 대한 내용은 나중에 다룰 예정입니다):

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

Date 또는 DateTime 파싱은 포맷 문자열을 사용하여 수행됩니다. 포맷 문자열은 구분된 또는 고정 너비 "슬롯"을 정의하는 개념에 따라 작동하며, 파싱할 텍스트와 포맷 문자열을 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 또는 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 생성자에 전달합니다. 형식은 Date("2015-01-01",dateformat"y-m-d") 또는 DateTime("20150101",dateformat"yyyymmdd")입니다.

구분된 슬롯은 두 개의 연속된 기간 사이에 파서가 예상해야 하는 구분 기호를 지정하여 표시됩니다. 따라서 "y-m-d"는 파서에게 "2014-07-16"과 같은 날짜 문자열에서 첫 번째와 두 번째 슬롯 사이에 - 문자가 있어야 함을 알려줍니다. y, m, d 문자는 각 슬롯에서 어떤 기간을 파싱해야 하는지를 파서에게 알려줍니다.

위의 생성자 예제인 Date(2013)와 같이 구분된 DateFormat은 이전 부분이 주어지는 한 날짜와 시간의 일부가 누락될 수 있습니다. 다른 부분은 일반적인 기본값이 주어집니다. 예를 들어, Date("1981-03", dateformat"y-m-d")1981-03-01을 반환하고, Date("31/12", dateformat"d/m/y")0001-12-31을 제공합니다. (기본 연도는 1년 AD/CE입니다.) 그러나 빈 문자열은 항상 ArgumentError를 발생시킵니다.

고정 폭 슬롯은 폭에 해당하는 횟수만큼 마침표 문자를 반복하여 지정되며, 문자 사이에 구분자가 없습니다. 따라서 dateformat"yyyymmdd""20140716"과 같은 날짜 문자열에 해당합니다. 파서는 구분자의 부재로 고정 폭 슬롯을 구분하며, 한 마침표 문자에서 다음 마침표 문자로의 전환인 "yyyymm"을 주목합니다.

텍스트 형식의 월 파싱에 대한 지원은 각각 약어 및 전체 길이 월 이름에 대해 uU 문자를 통해 지원됩니다. 기본적으로 영어 월 이름만 지원되므로 u는 "Jan", "Feb", "Mar" 등에 해당합니다. 그리고 U는 "January", "February", "March" 등에 해당합니다. 다른 이름=>값 매핑 함수와 유사하게 daynamemonthname, 약어 및 전체 이름 월 이름에 대해 각각 MONTHTOVALUEABBRMONTHTOVALUE 사전에 locale=>Dict{String,Int} 매핑을 전달하여 사용자 지정 로케일을 로드할 수 있습니다.

위의 예제에서는 dateformat"" 문자열 매크로를 사용했습니다. 이 매크로는 매크로가 확장될 때 한 번 DateFormat 객체를 생성하고, 코드 조각이 여러 번 실행되더라도 동일한 DateFormat 객체를 사용합니다.

julia> for i = 1:10^5
           Date("2015-01-01", dateformat"y-m-d")
       end

또는 DateFormat 객체를 명시적으로 생성할 수 있습니다:

julia> df = DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02

대신 브로드캐스팅을 사용하세요:

julia> years = ["2015", "2016"];

julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
 2015-01-01
 2016-01-01

편의를 위해 형식 문자열을 직접 전달할 수 있습니다(예: Date("2015-01-01","y-m-d")). 그러나 이 형식은 동일한 형식을 반복적으로 구문 분석할 경우 성능 비용이 발생합니다. 매번 내부적으로 새로운 DateFormat 객체를 생성하기 때문입니다.

생성자를 통해서뿐만 아니라, Date 또는 DateTime은 문자열에서 parsetryparse 함수를 사용하여 생성될 수 있지만, 선택적 세 번째 인수로 DateFormat 유형의 형식을 지정할 수 있습니다. 예를 들어, parse(Date, "06.23.2013", dateformat"m.d.y") 또는 기본 형식을 사용하는 tryparse(DateTime, "1999-12-31T23:59:59")가 있습니다. 두 함수의 주요 차이점은 4d61726b646f776e2e436f64652822222c202274727970617273652229_40726566를 사용할 경우 문자열이 비어 있거나 잘못된 형식일 때 오류가 발생하지 않고 대신 nothing이 반환된다는 점입니다.

Julia 1.9

Julia 1.9 이전에는 빈 문자열이 생성자와 parse에 오류 없이 전달될 수 있었으며, 적절하게 DateTime(1), Date(1) 또는 Time(0)을 반환했습니다. 마찬가지로, tryparsenothing을 반환하지 않았습니다.

전체 구문 분석 및 형식 지정 테스트와 예제는 stdlib/Dates/test/io.jl에서 확인할 수 있습니다.

Durations/Comparisons

Finding the length of time between two Date or DateTime is straightforward given their underlying representation as UTInstant{Day} and UTInstant{Millisecond}, respectively. The difference between Date is returned in the number of Day, and DateTime in the number of Millisecond. Similarly, comparing TimeType is a simple matter of comparing the underlying machine instants (which in turn compares the internal Int64 values).

julia> dt = Date(2012,2,29)
2012-02-29

julia> dt2 = Date(2000,2,1)
2000-02-01

julia> dump(dt)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 734562

julia> dump(dt2)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 730151

julia> dt > dt2
true

julia> dt != dt2
true

julia> dt + dt2
ERROR: MethodError: no method matching +(::Date, ::Date)
[...]

julia> dt * dt2
ERROR: MethodError: no method matching *(::Date, ::Date)
[...]

julia> dt / dt2
ERROR: MethodError: no method matching /(::Date, ::Date)

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

julia> dt = DateTime(2012,2,29)
2012-02-29T00:00:00

julia> dt2 = DateTime(2000,2,1)
2000-02-01T00:00:00

julia> dt - dt2
381110400000 milliseconds

Accessor Functions

DateDateTime 유형은 단일 Int64 값으로 저장되므로, 날짜 부분 또는 필드는 접근자 함수를 통해 검색할 수 있습니다. 소문자 접근자는 필드를 정수로 반환합니다:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

Period

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

복합 메서드는 여러 필드에 동시에 접근하는 것이 개별적으로 접근하는 것보다 더 효율적이기 때문에 제공됩니다:

julia> Dates.yearmonth(t)
(2014, 1)

julia> Dates.monthday(t)
(1, 31)

julia> Dates.yearmonthday(t)
(2014, 1, 31)

하나는 기본 UTInstant 또는 정수 값을 액세스할 수도 있습니다:

julia> dump(t)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 735264

julia> t.instant
Dates.UTInstant{Day}(Day(735264))

julia> Dates.value(t)
735264

Query Functions

쿼리 함수는 TimeType에 대한 달력 정보를 제공합니다. 여기에는 요일에 대한 정보가 포함됩니다:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

julia> Dates.dayofweekofmonth(t) # 5th Friday of January
5

연중 월:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

TimeType의 연도와 분기에 대한 정보:

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

daynamemonthname 메서드는 선택적 locale 키워드를 사용할 수 있으며, 이를 통해 다른 언어/지역의 요일 또는 월 이름을 반환할 수 있습니다. 또한 약어 이름을 반환하는 이러한 함수의 버전도 있으며, 즉 dayabbrmonthabbr입니다. 먼저 매핑이 LOCALES 변수에 로드됩니다:

julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
                        "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

julia> french_months_abbrev = ["janv","févr","mars","avril","mai","juin",
                              "juil","août","sept","oct","nov","déc"];

julia> french_days = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"];

julia> Dates.LOCALES["french"] = Dates.DateLocale(french_months, french_months_abbrev, french_days, [""]);

위에서 언급한 함수들은 쿼리를 수행하는 데 사용될 수 있습니다:

julia> Dates.dayname(t;locale="french")
"vendredi"

julia> Dates.monthname(t;locale="french")
"janvier"

julia> Dates.monthabbr(t;locale="french")
"janv"

축약된 버전의 요일이 로드되지 않았기 때문에 dayabbr 함수를 사용하려고 하면 오류가 발생합니다.

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Vector{String} at index [5]
Stacktrace:
[...]

TimeType-Period Arithmetic

날짜/시간 프레임워크를 사용할 때 날짜-기간 산술이 어떻게 처리되는지 아는 것은 좋은 습관입니다. 왜냐하면 처리해야 할 몇 가지 tricky issues가 있기 때문입니다 (하루 정밀도 유형에 대해서는 훨씬 덜하지만).

Dates 모듈 접근 방식은 Period 산술을 수행할 때 가능한 한 적게 변경하려는 간단한 원칙을 따르려고 합니다. 이 접근 방식은 종종 달력 산술 또는 누군가가 대화 중에 같은 계산을 물어본다면 아마도 추측할 수 있는 방식으로 알려져 있습니다. 왜 이게 이렇게 중요한가요? 고전적인 예를 들어보겠습니다: 2014년 1월 31일에 1개월을 추가하세요. 답은 무엇인가요? 자바스크립트는 March 3 (31일 기준)라고 말합니다. PHP는 March 2 (30일 기준)라고 말합니다. 사실, 정답은 없습니다. Dates 모듈에서는 2월 28일의 결과를 제공합니다. 어떻게 그렇게 계산할까요? 카지노의 고전적인 7-7-7 도박 게임을 고려해 보세요.

이제 7-7-7 대신 슬롯이 연도-월-일 형식이라고 상상해 보세요. 예를 들어, 2014-01-31입니다. 이 날짜에 1개월을 추가하라고 요청하면, 월 슬롯이 증가하여 이제 2014-02-31이 됩니다. 그런 다음, 일 숫자가 새 월의 마지막 유효 일보다 큰지 확인합니다. 만약 그렇다면(위의 경우처럼), 일 숫자는 마지막 유효 일(28)로 조정됩니다. 이 접근 방식의 결과는 무엇일까요? 날짜에 또 다른 월을 추가해 보세요, 2014-02-28 + Month(1) == 2014-03-28. 뭐라고요? 3월의 마지막 날을 기대하셨나요? 아닙니다, 죄송합니다. 7-7-7 슬롯을 기억하세요. 가능한 한 적은 슬롯이 변경되므로, 먼저 월 슬롯을 1만큼 증가시킵니다. 2014-03-28이 되고, 끝났습니다. 이는 유효한 날짜이기 때문입니다. 반면, 원래 날짜인 2014-01-31에 2개월을 추가하면, 예상대로 2014-03-31이 됩니다. 이 접근 방식의 또 다른 결과는 특정 순서가 강제될 때 결합 법칙이 손실된다는 것입니다(즉, 다른 순서로 추가하면 다른 결과가 나옵니다). 예를 들어:

julia> (Date(2014,1,29)+Dates.Day(1)) + Dates.Month(1)
2014-02-28

julia> (Date(2014,1,29)+Dates.Month(1)) + Dates.Day(1)
2014-03-01

무슨 일이 일어나고 있나요? 첫 번째 줄에서는 1일을 1월 29일에 추가하고, 그 결과 2014-01-30이 됩니다. 그런 다음 1개월을 추가하면 2014-02-30이 되고, 이는 2014-02-28로 조정됩니다. 두 번째 예에서는 먼저 1개월을 추가하여 2014-02-29가 되고, 이는 2014-02-28로 조정된 다음, 1일을 추가하여 2014-03-01이 됩니다. 이 경우에 도움이 되는 디자인 원칙 중 하나는 여러 기간이 있을 때, 연산이 기간의 유형에 따라 순서가 정해진다는 것입니다. 즉, Year가 항상 먼저 추가되고, 그 다음에 Month, Week 등이 추가됩니다. 따라서 다음은 결합법칙을 결과적으로 보장하며 잘 작동합니다:

julia> Date(2014,1,29) + Dates.Day(1) + Dates.Month(1)
2014-03-01

julia> Date(2014,1,29) + Dates.Month(1) + Dates.Day(1)
2014-03-01

교묘한가? 아마도. 순진한 Dates 사용자는 무엇을 해야 할까요? 핵심은 특정 결합성을 명시적으로 강제하는 것이 월을 다룰 때 예상치 못한 결과를 초래할 수 있다는 점을 인식하는 것입니다. 그렇지 않으면 모든 것이 예상대로 작동해야 합니다. 다행히도, UT에서 시간을 다룰 때 날짜-기간 산술에서의 이상한 경우는 이 정도가 전부입니다 (일광 절약 시간, 윤초 등을 다루는 "즐거움"을 피하면서).

보너스로, 모든 기간 산술 객체는 범위와 직접 작동합니다:

julia> dr = Date(2014,1,29):Day(1):Date(2014,2,3)
Date("2014-01-29"):Day(1):Date("2014-02-03")

julia> collect(dr)
6-element Vector{Date}:
 2014-01-29
 2014-01-30
 2014-01-31
 2014-02-01
 2014-02-02
 2014-02-03

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Vector{Date}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29

Adjuster Functions

날짜-기간 산술이 편리하긴 하지만, 종종 날짜에 필요한 계산은 고정된 기간의 수보다는 달력적 또는 시간적 성격을 띠게 됩니다. 휴일이 그 좋은 예입니다. 대부분 "메모리얼 데이 = 5월의 마지막 월요일" 또는 "추수감사절 = 11월의 4번째 목요일"과 같은 규칙을 따릅니다. 이러한 종류의 시간적 표현은 월의 첫 번째 또는 마지막, 다음 화요일, 첫 번째 및 세 번째 수요일 등과 같이 달력에 상대적인 규칙을 다룹니다.

Dates 모듈은 시간 규칙을 간단하고 간결하게 표현하는 데 도움이 되는 여러 편리한 메서드를 통해 조정기 API를 제공합니다. 조정기 메서드의 첫 번째 그룹은 주, 월, 분기 및 연도의 첫 번째와 마지막을 다룹니다. 이들은 각각 단일 TimeType를 입력으로 받아 원하는 기간의 첫 번째 또는 마지막으로 조정하여 반환합니다.

julia> Dates.firstdayofweek(Date(2014,7,16)) # Adjusts the input to the Monday of the input's week
2014-07-14

julia> Dates.lastdayofmonth(Date(2014,7,16)) # Adjusts to the last day of the input's month
2014-07-31

julia> Dates.lastdayofquarter(Date(2014,7,16)) # Adjusts to the last day of the input's quarter
2014-09-30

다음 두 개의 고차 방법인 tonexttoprev는 시작 TimeType와 함께 첫 번째 인수로 DateFunction을 사용하여 시간 표현을 처리하는 방법을 일반화합니다. DateFunction은 단일 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566를 입력으로 받아 Bool를 반환하는 함수로, 일반적으로 익명입니다. true는 만족스러운 조정 기준을 나타냅니다. 예를 들어:

julia> istuesday = x->Dates.dayofweek(x) == Dates.Tuesday; # Returns true if the day of the week of x is Tuesday

julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 is a Sunday
2014-07-15

julia> Dates.tonext(Date(2014,7,13), Dates.Tuesday) # Convenience method provided for day of the week adjustments
2014-07-15

이것은 더 복잡한 시간 표현을 위한 do-block 구문과 함께 유용합니다:

julia> Dates.tonext(Date(2014,7,13)) do x
           # Return true on the 4th Thursday of November (Thanksgiving)
           Dates.dayofweek(x) == Dates.Thursday &&
           Dates.dayofweekofmonth(x) == 4 &&
           Dates.month(x) == Dates.November
       end
2014-11-27

Base.filter 메소드는 지정된 범위 내의 모든 유효한 날짜/순간을 얻는 데 사용할 수 있습니다:

# Pittsburgh street cleaning; Every 2nd Tuesday from April to November
# Date range from January 1st, 2014 to January 1st, 2015
julia> dr = Dates.Date(2014):Day(1):Dates.Date(2015);

julia> filter(dr) do x
           Dates.dayofweek(x) == Dates.Tue &&
           Dates.April <= Dates.month(x) <= Dates.Nov &&
           Dates.dayofweekofmonth(x) == 2
       end
8-element Vector{Date}:
 2014-04-08
 2014-05-13
 2014-06-10
 2014-07-08
 2014-08-12
 2014-09-09
 2014-10-14
 2014-11-11

추가 예제 및 테스트는 stdlib/Dates/test/adjusters.jl에서 확인할 수 있습니다.

Period Types

기간은 인간이 보는 불연속적이고 때때로 불규칙한 시간의 지속입니다. 1개월을 고려해보면, 연도와 월의 맥락에 따라 28, 29, 30 또는 31일을 나타낼 수 있습니다. 또는 윤년의 경우 1년은 365일 또는 366일을 나타낼 수 있습니다. Period 유형은 간단한 Int64 래퍼이며, 모든 Int64 변환 가능 유형을 래핑하여 구성됩니다. 즉, Year(1) 또는 Month(3.0)과 같습니다. 동일한 유형의 4d61726b646f776e2e436f64652822222c2022506572696f642229_40726566 간의 산술 연산은 정수처럼 작동하며, 제한된 Period-Real 산술 연산이 가능합니다. 기본 정수를 추출하려면 Dates.value를 사용할 수 있습니다.

julia> y1 = Dates.Year(1)
1 year

julia> y2 = Dates.Year(2)
2 years

julia> y3 = Dates.Year(10)
10 years

julia> y1 + y2
3 years

julia> div(y3,y2)
5

julia> y3 - y2
8 years

julia> y3 % y2
0 years

julia> div(y3,3) # mirrors integer division
3 years

julia> Dates.value(Dates.Millisecond(10))
10

비정수 배수의 기간이나 지속 시간을 표현하는 것은 Dates.CompoundPeriod 유형을 사용하여 달성할 수 있습니다. 복합 기간은 간단한 Period 유형에서 수동으로 구성할 수 있습니다. 또한, canonicalize 함수를 사용하여 기간을 4d61726b646f776e2e436f64652822222c202244617465732e436f6d706f756e64506572696f642229_40726566로 분해할 수 있습니다. 이는 두 개의 DateTime 간의 차이와 같은 지속 시간을 보다 편리한 표현으로 변환하는 데 특히 유용합니다.

julia> cp = Dates.CompoundPeriod(Day(1),Minute(1))
1 day, 1 minute

julia> t1 = DateTime(2018,8,8,16,58,00)
2018-08-08T16:58:00

julia> t2 = DateTime(2021,6,23,10,00,00)
2021-06-23T10:00:00

julia> canonicalize(t2-t1) # creates a CompoundPeriod
149 weeks, 6 days, 17 hours, 2 minutes

Rounding

DateDateTime 값은 floor, ceil, 또는 round를 사용하여 지정된 해상도(예: 1개월 또는 15분)로 반올림할 수 있습니다.

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day)
2016-08-07T00:00:00

숫자 round 방법과 달리, 기본적으로 짝수 쪽으로 동점을 깨는 이 방법은 TimeType4d61726b646f776e2e436f64652822222c2022726f756e642229_40726566 방법은 RoundNearestTiesUp 반올림 모드를 사용합니다. (가장 가까운 "짝수" 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566로 동점을 깨는 것이 무엇을 의미하는지 추측하기 어렵습니다.) 사용 가능한 RoundingMode에 대한 자세한 내용은 API reference에서 확인할 수 있습니다.

반올림은 일반적으로 예상대로 작동해야 하지만, 예상되는 동작이 명확하지 않은 몇 가지 경우가 있습니다.

Rounding Epoch

많은 경우, 반올림을 위해 지정된 해상도(예: Dates.Second(30))는 다음으로 큰 주기(이 경우 Dates.Minute(1))에 정확히 나누어 떨어집니다. 그러나 이러한 경우에 반올림 동작이 그렇지 않은 경우에는 혼란을 초래할 수 있습니다. DateTime를 가장 가까운 10시간으로 반올림할 때 예상되는 결과는 무엇인가요?

julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00

그것은 혼란스러울 수 있습니다. 왜냐하면 시간(12)은 10으로 나눌 수 없기 때문입니다. 2016-07-17T12:00:00이 선택된 이유는 0000-01-01T00:00:00 이후 17,676,660시간이 경과했으며, 17,676,660은 10으로 나눌 수 있기 때문입니다.

줄리아 DateDateTime 값은 ISO 8601 표준에 따라 표현되며, 날짜(및 밀리초) 계산의 반올림 계산을 시작하기 위해 0000-01-01T00:00:00이 기준(또는 "반올림 기준점")으로 선택되었습니다. (이는 줄리아의 내부 표현인 4d61726b646f776e2e436f64652822222c2022446174652229_40726566Rata Die notation를 사용하여 약간 다르다는 점에 유의하십시오. 그러나 ISO 8601 표준이 최종 사용자에게 가장 잘 보이기 때문에 혼란을 최소화하기 위해 내부적으로 사용되는 0000-12-31T00:00:00 대신 0000-01-01T00:00:00이 반올림 기준점으로 선택되었습니다.)

0000-01-01T00:00:00를 반올림 기준으로 사용하는 유일한 예외는 주 단위로 반올림할 때입니다. 가장 가까운 주로 반올림할 경우 항상 월요일(ISO 8601에 의해 지정된 주의 첫 번째 날)이 반환됩니다. 이러한 이유로, 주 단위로 반올림할 때는 0000-01-03T00:00:00(ISO 8601에 의해 정의된 0000년 첫 주의 첫 번째 날)을 기준으로 사용합니다.

여기 예상되는 동작이 반드시 명확하지 않은 관련 사례가 있습니다: P(2)에 가장 가까운 값으로 반올림할 때 어떤 일이 발생할까요? 여기서 PPeriod 유형입니다. 특정 경우(특히 P <: Dates.TimePeriod인 경우)에는 답이 명확합니다:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Hour(2))
2016-07-17T08:00:00

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Minute(2))
2016-07-17T08:56:00

이것은 명백해 보입니다. 왜냐하면 이러한 각 주기의 두 배가 여전히 다음 더 큰 주기로 고르게 나누어지기 때문입니다. 그러나 두 달의 경우(여전히 1년으로 고르게 나누어짐) 답은 놀라울 수 있습니다:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00

왜 7월의 첫째 날로 반올림하나요? 7은 홀수인데 말이죠. 핵심은 월이 1부터 시작된다는 것입니다(첫 번째 월은 1로 할당됨). 반면, 시간, 분, 초, 밀리초는 0부터 시작합니다.

이것은 DateTime를 초, 분, 시간 또는 연도의 짝수 배수로 반올림하면 해당 필드에서 짝수 값을 가지는 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566가 생성된다는 것을 의미합니다(ISO 8601 사양에는 연도 0이 포함되기 때문입니다). 반면, 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566를 월의 짝수 배수로 반올림하면 월 필드가 홀수 값을 가지게 됩니다. 월과 연도 모두 불규칙한 일 수를 포함할 수 있기 때문에, 짝수 일 수로 반올림했을 때 일 필드에서 짝수 값이 생성될지는 불확실합니다.

Dates 모듈에서 내보낸 메서드에 대한 추가 정보는 API reference를 참조하세요.

API reference

Dates and Time Types

Dates.PeriodType
기간
년
분기
월
주
일
시간
분
초
밀리초
마이크로초
나노초

기간 유형은 시간의 이산적이고 인간적인 표현을 나타냅니다.

source
Dates.CompoundPeriodType
CompoundPeriod

CompoundPeriod는 고정된 작은 기간의 배수가 아닌 시간 기간을 표현하는 데 유용합니다. 예를 들어, "1년과 1일"은 고정된 일 수가 아니지만 CompoundPeriod를 사용하여 표현할 수 있습니다. 실제로, 서로 다른 기간 유형의 덧셈에 의해 CompoundPeriod가 자동으로 생성됩니다. 예를 들어, Year(1) + Day(1)CompoundPeriod 결과를 생성합니다.

source
Dates.InstantType
Instant

Instant 유형은 에포크에서 시작하는 연속적인 타임라인으로서 시간의 정수 기반 기계 표현을 나타냅니다.

source
Dates.UTInstantType
UTInstant{T}

UTInstant는 UT 시간(1일 = 지구의 한 바퀴 회전)을 기반으로 한 기계 타임라인을 나타냅니다. T는 순간의 해상도 또는 정밀도를 나타내는 Period 매개변수입니다.

source
Dates.TimeTypeType
TimeType

TimeType 유형은 기계 인스턴스인 Instant를 감싸서 기계 인스턴스의 인간 친화적인 표현을 제공합니다. Time, DateTimeDateTimeType의 하위 유형입니다.

source
Dates.DateTimeType
DateTime

DateTime은 프로레프틱 그레고리력에 따라 시간의 한 지점을 나타냅니다. 시간의 가장 세밀한 해상도는 밀리초입니다(즉, 마이크로초나 나노초는 이 유형으로 표현할 수 없습니다). 이 유형은 고정 소수점 산술을 지원하므로 언더플로우(및 오버플로우)에 취약합니다. 주목할 만한 결과는 Microsecond 또는 Nanosecond를 더할 때 반올림이 발생하는 것입니다:

julia> dt = DateTime(2023, 8, 19, 17, 45, 32, 900)
2023-08-19T17:45:32.900

julia> dt + Millisecond(1)
2023-08-19T17:45:32.901

julia> dt + Microsecond(1000) # 1000us == 1ms
2023-08-19T17:45:32.901

julia> dt + Microsecond(999) # 999us는 1000us로 반올림됨
2023-08-19T17:45:32.901

julia> dt + Microsecond(1499) # 1499는 1000us로 반올림됨
2023-08-19T17:45:32.901
source
Dates.DateType
날짜

DateUTInstant{Day}를 감싸고 있으며, 이를 선행 그레고리력에 따라 해석합니다.

source
Dates.TimeType
시간

시간나노초를 감싸고 있으며 24시간 하루의 특정 순간을 나타냅니다.

source
Dates.TimeZoneType
TimeZone

지리적 구역은 일반적으로 경도를 기준으로 하여 특정 위치에서의 시간을 결정합니다. 일부 시간대는 일광 절약 시간을 적용합니다 (예: EST -> EDT). 구현 및 추가 지원에 대해서는 TimeZones.jl 패키지를 참조하세요.

source
Dates.UTCType
UTC

UTC, 또는 협정 세계시(Coordinated Universal Time)는 모든 다른 시간대가 측정되는 TimeZone입니다. 이는 0° 경도에서의 시간과 관련이 있습니다. 일광 절약 시간제에 따라 조정되지 않습니다.

source

Dates Functions

Dates.DateTimeMethod
DateTime(y, [m, d, h, mi, s, ms]) -> DateTime

부분별로 DateTime 유형을 구성합니다. 인수는 Int64로 변환 가능해야 합니다.

source
Dates.DateTimeMethod
DateTime(periods::Period...) -> DateTime

Period 타입 부분으로 DateTime 타입을 생성합니다. 인수는 어떤 순서로든 제공될 수 있습니다. 제공되지 않은 DateTime 부분은 Dates.default(period)의 값으로 기본 설정됩니다.

source
Dates.DateTimeMethod
DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime

조정기 API를 통해 DateTime을 생성합니다. 시작점은 제공된 y, m, d... 인수로 구성되며, f::Functiontrue를 반환할 때까지 조정됩니다. 조정 시의 단계 크기는 step 키워드를 통해 수동으로 제공할 수 있습니다. limit는 조정 API가 오류를 발생시키기 전에 추구할 최대 반복 횟수의 한계를 제공합니다(만약 f::Function이 결코 만족되지 않는 경우).

예제

julia> DateTime(dt -> second(dt) == 40, 2010, 10, 20, 10; step = Second(1))
2010-10-20T10:00:40

julia> DateTime(dt -> hour(dt) == 20, 2010, 10, 20, 10; step = Hour(1), limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateTimeMethod
DateTime(dt::Date) -> DateTime

DateDateTime으로 변환합니다. 새로운 DateTime의 시, 분, 초 및 밀리초 부분은 0으로 가정됩니다.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime

dt 날짜 시간 문자열을 format 문자열에 주어진 패턴에 따라 파싱하여 DateTime을 생성합니다 (구문에 대한 내용은 DateFormat를 참조하십시오).

Note

이 메서드는 호출될 때마다 DateFormat 객체를 생성합니다. 동일한 형식을 반복해서 사용할 때 성능 저하를 피하기 위해 대신 DateFormat 객체를 생성하고 이를 두 번째 인수로 사용하는 것이 좋습니다.

예제

julia> DateTime("2020-01-01", "yyyy-mm-dd")
2020-01-01T00:00:00

julia> a = ("2020-01-01", "2020-01-02");

julia> [DateTime(d, dateformat"yyyy-mm-dd") for d ∈ a] # 선호됨
2-element Vector{DateTime}:
 2020-01-01T00:00:00
 2020-01-02T00:00:00
source
Dates.formatMethod
format(dt::TimeType, format::AbstractString; locale="english") -> AbstractString

TimeType 객체를 사용하고 제공된 format을 적용하여 문자열을 생성합니다. 다음 문자 코드를 사용하여 format 문자열을 구성할 수 있습니다:

코드예시설명
y6고정 너비의 숫자 연도
Y1996최소 너비의 숫자 연도
m1, 12최소 너비의 숫자 월
uJanlocale에 따라 3자로 축약된 월 이름
UJanuarylocale 키워드에 따른 전체 월 이름
d1, 31최소 너비의 월의 일
H0, 23최소 너비의 시간 (24시간제)
M0, 59최소 너비의 분
S0, 59최소 너비의 초
s000, 500최소 너비 3의 밀리초
eMon, Tue축약된 주의 요일
EMonday전체 주의 요일 이름

연속 코드 문자의 수는 코드의 너비를 나타냅니다. yyyy-mm 형식은 코드 y가 너비 4를 가져야 하고 m이 너비 2를 가져야 함을 지정합니다. 숫자 자리를 생성하는 코드에는 고정 너비 또는 최소 너비의 모드가 있습니다. 고정 너비 모드는 지정된 너비보다 짧을 경우 값을 0으로 왼쪽 패딩하고, 길 경우 값을 잘라냅니다. 최소 너비 모드는 고정 너비와 동일하게 작동하지만 너비보다 긴 값은 잘라내지 않습니다.

format을 생성할 때 구분 기호로 비코드 문자를 사용할 수 있습니다. 예를 들어 "1996-01-15T00:00:00" 문자열을 생성하려면 format: "yyyy-mm-ddTHH:MM:SS"를 사용할 수 있습니다. 코드 문자를 리터럴로 사용해야 하는 경우 이스케이프 문자 백슬래시를 사용할 수 있습니다. 문자열 "1996y01m"은 형식 "yyyy\ymm\m"으로 생성할 수 있습니다.

source
Dates.DateFormatType
DateFormat(format::AbstractString, locale="english") -> DateFormat

날짜 문자열을 파싱하거나 날짜 객체를 문자열로 포맷하는 데 사용할 수 있는 날짜 포맷팅 객체를 생성합니다. 다음 문자 코드를 사용하여 format 문자열을 구성할 수 있습니다:

코드일치하는 항목설명
Y1996, 961996년 또는 0096을 반환
y1996, 96parse에서 Y와 동일하지만 format에서 초과 자릿수를 버림
m1, 011자리 또는 2자리 월과 일치
uJanlocale 키워드에 따라 약어 월과 일치
UJanuarylocale 키워드에 따라 전체 월 이름과 일치
d1, 011자리 또는 2자리 일과 일치
H00시간 (24시간제)와 일치
I0012시간제로 시간을 출력하기 위해 사용
M00분과 일치
S00초와 일치
s.500밀리초와 일치
eMon, Tues약어로 된 주의 요일과 일치
EMonday전체 이름의 주의 요일과 일치
pAMAM/PM (대소문자 구분 없음)와 일치
yyyymmdd19960101고정 너비의 연도, 월 및 일과 일치

위에 나열되지 않은 문자는 일반적으로 날짜와 시간 슬롯 사이의 구분 기호로 처리됩니다. 예를 들어 "1996-01-15T00:00:00.0"의 dt 문자열은 "y-m-dTH:M:S.s"와 같은 format 문자열을 가집니다. 구분 기호로 코드 문자를 사용해야 하는 경우 백슬래시를 사용하여 이스케이프할 수 있습니다. 날짜 "1995y01m"은 "y\ym\m" 형식을 가집니다.

12:00AM은 00:00 (자정)에 해당하고, 12:00PM은 12:00 (정오)에 해당합니다. p 지정자가 있는 시간을 파싱할 때, 모든 시간 ( H 또는 I)은 12시간제로 해석되므로 I 코드는 주로 출력을 위해 유용합니다.

DateFormat 객체를 생성하는 것은 비용이 많이 듭니다. 가능한 경우 한 번 생성하고 여러 번 사용하거나 dateformat"" 문자열 매크로를 사용해 보십시오. 이 매크로를 사용하면 매크로 확장 시 한 번 DateFormat 객체를 생성하고 나중에 재사용합니다. 또한 나중에 나열된 여러 미리 정의된 포맷터가 있습니다.

DateTimeformat를 참조하여 DateFormat 객체를 사용하여 날짜 문자열을 파싱하고 작성하는 방법을 확인하십시오.

source
Dates.@dateformat_strMacro
dateformat"Y-m-d H:M:S"

DateFormat 객체를 생성합니다. DateFormat("Y-m-d H:M:S")와 유사하지만 매크로 확장 중에 한 번만 DateFormat 객체를 생성합니다.

형식 지정자에 대한 자세한 내용은 DateFormat를 참조하십시오.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTime

dt 날짜 시간 문자열을 DateFormat 객체에 주어진 패턴에 따라 파싱하여 DateTime을 생성합니다. 생략할 경우 날짜 형식은 "yyyy-mm-dd\THH:MM:SS.s"입니다.

DateTime(::AbstractString, ::AbstractString)와 유사하지만, 미리 생성된 DateFormat 객체를 사용하여 유사한 형식의 날짜 시간 문자열을 반복적으로 파싱할 때 더 효율적입니다.

source
Dates.DateMethod
Date(y, [m, d]) -> Date

부분으로 Date 유형을 구성합니다. 인수는 Int64로 변환 가능해야 합니다.

source
Dates.DateMethod
Date(period::Period...) -> Date

Period 타입 부분으로 Date 타입을 생성합니다. 인수는 어떤 순서로든 제공될 수 있습니다. 제공되지 않은 Date 부분은 Dates.default(period)의 값으로 기본 설정됩니다.

source
Dates.DateMethod
Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date

조정기 API를 통해 Date를 생성합니다. 시작점은 제공된 y, m, d 인수로 구성되며, f::Functiontrue를 반환할 때까지 조정됩니다. 조정 시의 단계 크기는 step 키워드를 통해 수동으로 제공할 수 있습니다. limit는 조정 API가 오류를 발생시키기 전에 추구할 최대 반복 횟수의 한계를 제공합니다(주어진 f::Function이 결코 만족되지 않는 경우).

예제

julia> Date(date -> week(date) == 20, 2010, 01, 01)
2010-05-17

julia> Date(date -> year(date) == 2010, 2000, 01, 01)
2010-01-01

julia> Date(date -> month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateMethod
Date(dt::DateTime) -> Date

DateTimeDate로 변환합니다. DateTime의 시, 분, 초 및 밀리초 부분은 잘리므로 연도, 월 및 일 부분만 사용하여 생성됩니다.

source
Dates.DateMethod
Date(d::AbstractString, format::AbstractString; locale="english") -> Date

format 문자열에 주어진 패턴에 따라 d 날짜 문자열을 파싱하여 Date를 생성합니다 (구문에 대한 자세한 내용은 DateFormat를 참조하십시오).

Note

이 메서드는 호출될 때마다 DateFormat 객체를 생성합니다. 동일한 형식을 반복해서 사용할 때 성능 저하를 피하기 위해 대신 DateFormat 객체를 생성하고 이를 두 번째 인수로 사용하는 것이 좋습니다.

예제

julia> Date("2020-01-01", "yyyy-mm-dd")
2020-01-01

julia> a = ("2020-01-01", "2020-01-02");

julia> [Date(d, dateformat"yyyy-mm-dd") for d ∈ a] # 선호됨
2-element Vector{Date}:
 2020-01-01
 2020-01-02
source
Dates.DateMethod
Date(d::AbstractString, df::DateFormat=ISODateFormat) -> Date

주어진 DateFormat 객체의 패턴에 따라 d 날짜 문자열을 파싱하여 Date를 생성합니다. 생략할 경우 dateformat"yyyy-mm-dd"를 사용합니다.

Date(::AbstractString, ::AbstractString)와 유사하지만, 미리 생성된 DateFormat 객체를 사용하여 유사한 형식의 날짜 문자열을 반복적으로 파싱할 때 더 효율적입니다.

source
Dates.TimeMethod
Time(h, [mi, s, ms, us, ns]) -> Time

부분으로 Time 유형을 구성합니다. 인수는 Int64로 변환 가능해야 합니다.

source
Dates.TimeMethod
Time(period::TimePeriod...) -> Time

Period 타입 부분으로 Time 타입을 생성합니다. 인자는 어떤 순서로든 제공될 수 있습니다. 제공되지 않은 Time 부분은 Dates.default(period)의 값으로 기본 설정됩니다.

source
Dates.TimeMethod
함수(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000)
함수(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000)
함수(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000)
함수(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)

조정기 API를 통해 Time을 생성합니다. 시작점은 제공된 h, mi, s, ms, us 인수로 구성되며, f::Functiontrue를 반환할 때까지 조정됩니다. 조정 시의 단계 크기는 step 키워드를 통해 수동으로 제공할 수 있습니다. limit는 조정 API가 오류를 발생시키기 전에 추구할 최대 반복 횟수의 한계를 제공합니다(즉, f::Function이 결코 만족되지 않는 경우). 주의할 점은 기본 단계가 주어진 인수에 대해 더 높은 정밀도를 허용하도록 조정된다는 것입니다. 즉, 시간, 분, 초 인수가 제공되면 기본 단계는 Second(1) 대신 Millisecond(1)이 됩니다.

예제

julia> Time(t -> minute(t) == 30, 20)
20:30:00

julia> Time(t -> minute(t) == 0, 20)
20:00:00

julia> Time(t -> hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.TimeMethod
Time(dt::DateTime) -> Time

DateTimeTime으로 변환합니다. DateTime의 시, 분, 초 및 밀리초 부분이 새 Time을 만드는 데 사용됩니다. 마이크로초 및 나노초는 기본적으로 0입니다.

source
Dates.TimeMethod
Time(t::AbstractString, format::AbstractString; locale="english") -> Time

format 문자열에 따라 t 시간 문자열을 파싱하여 Time을 생성합니다 (구문에 대한 자세한 내용은 DateFormat를 참조하십시오).

Note

이 메서드는 호출될 때마다 DateFormat 객체를 생성합니다. 동일한 형식을 반복해서 사용할 때 성능 저하를 피하기 위해 대신 DateFormat 객체를 생성하고 이를 두 번째 인수로 사용하는 것이 좋습니다.

예제

julia> Time("12:34pm", "HH:MMp")
12:34:00

julia> a = ("12:34pm", "2:34am");

julia> [Time(d, dateformat"HH:MMp") for d ∈ a] # 선호됨
2-element Vector{Time}:
 12:34:00
 02:34:00
source
Dates.TimeMethod
Time(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time

주어진 DateFormat 객체의 패턴에 따라 t 날짜 시간 문자열을 파싱하여 Time을 생성합니다. 생략할 경우 dateformat"HH:MM:SS.s"를 사용합니다.

Time(::AbstractString, ::AbstractString)와 유사하지만, 미리 생성된 DateFormat 객체를 사용하여 유사한 형식의 시간 문자열을 반복적으로 파싱할 때 더 효율적입니다.

source
Dates.nowMethod
now() -> DateTime

사용자의 시스템 시간에 해당하는 DateTime을 반환하며, 시스템 시간대 로케일을 포함합니다.

source
Dates.nowMethod
now(::Type{UTC}) -> DateTime

사용자의 시스템 시간에 해당하는 DateTime을 UTC/GMT로 반환합니다. 다른 시간대에 대해서는 TimeZones.jl 패키지를 참조하세요.

예제

julia> now(UTC)
2023-01-04T10:52:24.864
source
Base.epsMethod
eps(::Type{DateTime}) -> 밀리초
eps(::Type{Date}) -> 일
eps(::Type{Time}) -> 나노초
eps(::TimeType) -> 기간

TimeType에서 지원하는 가장 작은 단위 값을 반환합니다.

예제

julia> eps(DateTime)
1 밀리초

julia> eps(Date)
1 일

julia> eps(Time)
1 나노초
source

Accessor Functions

Dates.yearFunction
year(dt::TimeType) -> Int64

Date 또는 DateTime의 연도를 Int64로 나타냅니다.

source
Dates.monthFunction
month(dt::TimeType) -> Int64

Date 또는 DateTime의 월을 Int64 형식으로 반환합니다.

source
Dates.weekFunction
week(dt::TimeType) -> Int64

Date 또는 DateTimeISO 주 날짜Int64로 반환합니다. 연도의 첫 번째 주는 연도의 첫 번째 목요일이 포함된 주이며, 이로 인해 1월 4일 이전의 날짜가 이전 연도의 마지막 주에 포함될 수 있습니다. 예를 들어, week(Date(2005, 1, 1))은 2004년의 53번째 주입니다.

예시

julia> week(Date(1989, 6, 22))
25

julia> week(Date(2005, 1, 1))
53

julia> week(Date(2004, 12, 31))
53
source
Dates.dayFunction
day(dt::TimeType) -> Int64

Date 또는 DateTime의 월의 일을 Int64 형식으로 나타냅니다.

source
Dates.hourFunction
hour(dt::DateTime) -> Int64

DateTime의 하루 중 시간을 Int64로 나타냅니다.

source
hour(t::Time) -> Int64

Time의 시간 부분을 Int64로 반환합니다.

source
Dates.minuteFunction
minute(dt::DateTime) -> Int64

DateTime의 분을 Int64로 반환합니다.

source
minute(t::Time) -> Int64

Time의 분을 Int64로 반환합니다.

source
Dates.secondFunction
second(dt::DateTime) -> Int64

DateTime의 초를 Int64로 나타냅니다.

source
second(t::Time) -> Int64

Time의 초를 Int64로 나타냅니다.

source
Dates.millisecondFunction
millisecond(dt::DateTime) -> Int64

DateTime의 밀리초를 Int64로 반환합니다.

source
millisecond(t::Time) -> Int64

Time의 밀리초를 Int64로 반환합니다.

source
Dates.YearMethod
Year(v)

주어진 v 값으로 Year 객체를 생성합니다. 입력은 Int64로 손실 없이 변환 가능해야 합니다.

source
Dates.MonthMethod
Month(v)

주어진 v 값으로 Month 객체를 생성합니다. 입력은 Int64로 손실 없이 변환 가능해야 합니다.

source
Dates.WeekMethod
Week(v)

주어진 v 값으로 Week 객체를 생성합니다. 입력은 Int64로 손실 없이 변환 가능해야 합니다.

source
Dates.DayMethod
Day(v)

주어진 v 값으로 Day 객체를 생성합니다. 입력은 Int64로 손실 없이 변환 가능해야 합니다.

source
Dates.HourMethod
Hour(dt::DateTime) -> Hour

DateTime의 시간 부분을 Hour로 반환합니다.

source
Dates.MinuteMethod
Minute(dt::DateTime) -> Minute

DateTime의 분 부분을 Minute으로 반환합니다.

source
Dates.SecondMethod
Second(dt::DateTime) -> Second

DateTime의 초 부분을 Second로 나타냅니다.

source
Dates.MillisecondMethod
Millisecond(dt::DateTime) -> Millisecond

DateTime의 밀리초 부분을 Millisecond로 반환합니다.

source
Dates.MicrosecondMethod
Microsecond(dt::Time) -> Microsecond

시간의 마이크로초 부분을 Microsecond로 반환합니다.

source
Dates.NanosecondMethod
Nanosecond(dt::Time) -> Nanosecond

시간의 나노초 부분을 Nanosecond로 반환합니다.

source
Dates.yearmonthFunction
yearmonth(dt::TimeType) -> (Int64, Int64)

Date 또는 DateTime의 연도와 월 부분을 동시에 반환합니다.

source
Dates.monthdayFunction
monthday(dt::TimeType) -> (Int64, Int64)

Date 또는 DateTime의 월과 일 부분을 동시에 반환합니다.

source
Dates.yearmonthdayFunction
yearmonthday(dt::TimeType) -> (Int64, Int64, Int64)

Date 또는 DateTime의 연도, 월 및 일 부분을 동시에 반환합니다.

source

Query Functions

Dates.daynameFunction
dayname(dt::TimeType; locale="korean") -> String
dayname(day::Integer; locale="korean") -> String

주어진 locale에 따라 Date 또는 DateTime의 요일에 해당하는 전체 요일 이름을 반환합니다. Integer도 허용됩니다.

예시

julia> dayname(Date("2000-01-01"))
"토요일"

julia> dayname(4)
"목요일"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="korean") -> String
dayabbr(day::Integer; locale="korean") -> String

주어진 locale에 해당하는 요일의 약어 이름을 반환합니다. Date 또는 DateTime에 대해 사용할 수 있으며, Integer도 허용됩니다.

예시

julia> dayabbr(Date("2000-01-01"))
"토"

julia> dayabbr(3)
"수"
source
Dates.dayofweekFunction
dayofweek(dt::TimeType) -> Int64

주를 나타내는 Int64를 반환하며 1 = 월요일, 2 = 화요일, 등.입니다.

예시

julia> dayofweek(Date("2000-01-01"))
6
source
Dates.dayofweekofmonthFunction
dayofweekofmonth(dt::TimeType) -> Int

dt의 주의 날에 대해, dt의 월에서 몇 번째인지 반환합니다. 따라서 dt의 주의 날이 월요일인 경우, 1 = 해당 월의 첫 번째 월요일, 2 = 두 번째 월요일, 등등. 1:5 범위 내에서.

예시

julia> dayofweekofmonth(Date("2000-02-01"))
1

julia> dayofweekofmonth(Date("2000-02-08"))
2

julia> dayofweekofmonth(Date("2000-02-15"))
3
source
Dates.daysofweekinmonthFunction
daysofweekinmonth(dt::TimeType) -> Int

dt의 요일에 대해, dt의 월에서 해당 요일의 총 수를 반환합니다. 4 또는 5를 반환합니다. 조정기 함수에서 dayofweekofmonth(dt) == daysofweekinmonth(dt)를 포함하여 한 달의 마지막 주의 날을 지정하는 데 유용합니다.

예시

julia> daysofweekinmonth(Date("2005-01-01"))
5

julia> daysofweekinmonth(Date("2005-01-04"))
4
source
Dates.monthnameFunction
monthname(dt::TimeType; locale="korean") -> String
monthname(month::Integer, locale="korean") -> String

주어진 locale에 따라 Date 또는 DateTime 또는 Integer의 월 이름을 반환합니다.

예시

julia> monthname(Date("2005-01-04"))
"1월"

julia> monthname(2)
"2월"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="korean") -> String
monthabbr(month::Integer, locale="korean") -> String

주어진 locale에 따라 Date 또는 DateTime 또는 Integer의 약어 형태의 월 이름을 반환합니다.

예시

julia> monthabbr(Date("2005-01-04"))
"1월"

julia> monthabbr(2)
"2월"
source
Dates.daysinmonthFunction
daysinmonth(dt::TimeType) -> Int

dt의 월에 있는 일 수를 반환합니다. 값은 28, 29, 30 또는 31이 됩니다.

예시

julia> daysinmonth(Date("2000-01"))
31

julia> daysinmonth(Date("2001-02"))
28

julia> daysinmonth(Date("2000-02"))
29
source
Dates.isleapyearFunction
isleapyear(dt::TimeType) -> Bool

dt의 연도가 윤년이면 true를 반환합니다.

예제

julia> isleapyear(Date("2004"))
true

julia> isleapyear(Date("2005"))
false
source
Dates.dayofyearFunction
dayofyear(dt::TimeType) -> Int

dt의 연중 날짜를 반환합니다. 1월 1일은 1일입니다.

source
Dates.daysinyearFunction
daysinyear(dt::TimeType) -> Int

dt의 연도가 윤년이면 366을 반환하고, 그렇지 않으면 365를 반환합니다.

예제

julia> daysinyear(1999)
365

julia> daysinyear(2000)
366
source
Dates.quarterofyearFunction
quarterofyear(dt::TimeType) -> Int

dt가 속한 분기를 반환합니다. 값의 범위는 1:4입니다.

source
Dates.dayofquarterFunction
dayofquarter(dt::TimeType) -> Int

dt의 현재 분기의 날짜를 반환합니다. 값의 범위는 1:92입니다.

source

Adjuster Functions

Base.truncMethod
trunc(dt::TimeType, ::Type{Period}) -> TimeType

주어진 Period 유형에 따라 dt의 값을 잘라냅니다.

예제

julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00
source
Dates.firstdayofweekFunction
firstdayofweek(dt::TimeType) -> TimeType

dt를 해당 주의 월요일로 조정합니다.

예시

julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
source
Dates.lastdayofweekFunction
lastdayofweek(dt::TimeType) -> TimeType

dt를 해당 주의 일요일로 조정합니다.

예시

julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
source
Dates.firstdayofmonthFunction
firstdayofmonth(dt::TimeType) -> TimeType

dt를 해당 월의 첫 번째 날로 조정합니다.

예시

julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
source
Dates.lastdayofmonthFunction
lastdayofmonth(dt::TimeType) -> TimeType

dt를 해당 월의 마지막 날로 조정합니다.

예제

julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
source
Dates.firstdayofyearFunction
firstdayofyear(dt::TimeType) -> TimeType

dt를 해당 연도의 첫 번째 날로 조정합니다.

예시

julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
source
Dates.lastdayofyearFunction
lastdayofyear(dt::TimeType) -> TimeType

dt를 해당 연도의 마지막 날로 조정합니다.

예시

julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
source
Dates.firstdayofquarterFunction
firstdayofquarter(dt::TimeType) -> TimeType

dt를 해당 분기의 첫 번째 날로 조정합니다.

예시

julia> firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00

julia> firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
source
Dates.lastdayofquarterFunction
lastdayofquarter(dt::TimeType) -> TimeType

dt를 해당 분기의 마지막 날로 조정합니다.

예시

julia> lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00

julia> lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
source
Dates.tonextMethod
tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

dtdow에 해당하는 다음 주의 날로 조정합니다. 여기서 1 = 월요일, 2 = 화요일, 등입니다. same=true로 설정하면 현재 dt가 다음 dow로 간주되어 조정이 발생하지 않습니다.

source
Dates.toprevMethod
toprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

dtdow에 해당하는 이전 주의 날로 조정합니다. 여기서 1 = 월요일, 2 = 화요일, 등입니다. same=true로 설정하면 현재 dt를 이전 dow로 간주할 수 있어 조정이 발생하지 않습니다.

source
Dates.tofirstFunction
tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType

dt를 해당 월의 첫 번째 dow로 조정합니다. 또는 of=Year를 사용하면 해당 연도의 첫 번째 dow로 조정됩니다.

source
Dates.tolastFunction
tolast(dt::TimeType, dow::Int; of=Month) -> TimeType

dt를 해당 월의 마지막 dow로 조정합니다. 또는 of=Year를 사용하면 연도의 마지막 dow로 조정됩니다.

source
Dates.tonextMethod
tonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType

dt를 조정하여 functrue를 반환할 때까지 최대 limit 반복을 step 증가로 수행합니다. func는 단일 TimeType 인수를 받아야 하며 Bool를 반환해야 합니다. samedtfunc를 만족하는 데 고려될 수 있도록 허용합니다.

source
Dates.toprevMethod
toprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType

dt를 조정하여 functrue를 반환할 때까지 최대 limit 반복을 step 증가로 수행합니다. func는 단일 TimeType 인수를 받아야 하며 Bool를 반환해야 합니다. samedtfunc를 만족하는 데 고려될 수 있도록 허용합니다.

source

Periods

Dates.PeriodMethod
Year(v)
Quarter(v)
Month(v)
Week(v)
Day(v)
Hour(v)
Minute(v)
Second(v)
Millisecond(v)
Microsecond(v)
Nanosecond(v)

주어진 v 값으로 Period 유형을 구성합니다. 입력은 Int64로 손실 없이 변환 가능해야 합니다.

source
Dates.CompoundPeriodMethod
CompoundPeriod(periods) -> CompoundPeriod

PeriodVector로부터 CompoundPeriod를 생성합니다. 동일한 유형의 모든 Period는 함께 더해집니다.

예시

julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 hours

julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 hour, 1 minute

julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 month, -2 weeks

julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 minutes
source
Dates.canonicalizeFunction
canonicalize(::CompoundPeriod) -> CompoundPeriod

CompoundPeriod를 다음 규칙을 적용하여 정준형으로 축소합니다:

  • 더 거친 Period로 부분적으로 표현될 수 있을 만큼 큰 Period는 여러 개의 Period로 나뉩니다 (예: Hour(30)Day(1) + Hour(6)로 변환됩니다)
  • 반대 부호의 Period는 가능할 때 결합됩니다 (예: Hour(1) - Day(1)-Hour(23)로 변환됩니다)

예제

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13)))
1 day, 1 hour

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1)))
-59 minutes

julia> canonicalize(Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2)))
1 month, -2 weeks

julia> canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
4 weeks, 6 days, 17 hours, 20 minutes
source
Dates.valueFunction
Dates.value(x::Period) -> Int64

주어진 기간에 대해 해당 기간과 관련된 값을 반환합니다. 예를 들어, value(Millisecond(10))은 정수로 10을 반환합니다.

source
Dates.defaultFunction
default(p::Period) -> Period

입력 Period에 대한 합리적인 "기본" 값을 반환합니다. Year, Month, Day의 경우 T(1)을 반환하고, Hour, Minute, Second, Millisecond의 경우 T(0)을 반환합니다.

source
Dates.periodsFunction
Dates.periods(::CompoundPeriod) -> Vector{Period}

주어진 CompoundPeriod를 구성하는 PeriodVector를 반환합니다.

Julia 1.7

이 함수는 Julia 1.7 이상이 필요합니다.

source

Rounding Functions

DateDateTime 값은 floor, ceil 또는 round를 사용하여 지정된 해상도(예: 1개월 또는 15분)로 반올림할 수 있습니다.

Base.floorMethod
floor(dt::TimeType, p::Period) -> TimeType

주어진 dt보다 작거나 같은 가장 가까운 Date 또는 DateTime을 해상도 p로 반환합니다.

편의를 위해 p는 값 대신 타입일 수 있습니다: floor(dt, Dates.Hour)floor(dt, Dates.Hour(1))의 단축키입니다.

julia> floor(Date(1985, 8, 16), Month)
1985-08-01

julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-06T00:00:00
source
Base.ceilMethod
ceil(dt::TimeType, p::Period) -> TimeType

주어진 dt보다 크거나 같은 가장 가까운 Date 또는 DateTime을 해상도 p로 반환합니다.

편의를 위해 p는 값 대신 타입일 수 있습니다: ceil(dt, Dates.Hour)ceil(dt, Dates.Hour(1))의 단축키입니다.

julia> ceil(Date(1985, 8, 16), Month)
1985-09-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:45:00

julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00
source
Base.roundMethod
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

dt에 대해 해상도 p로 가장 가까운 Date 또는 DateTime을 반환합니다. 기본값(RoundNearestTiesUp)에서는 동점(예: 9:30을 가장 가까운 시간으로 반올림할 때)이 위로 반올림됩니다.

편의를 위해 p는 값 대신 타입일 수 있습니다: round(dt, Dates.Hour)round(dt, Dates.Hour(1))의 단축키입니다.

julia> round(Date(1985, 8, 16), Month)
1985-08-01

julia> round(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> round(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00

round(::TimeType, ::Period, ::RoundingMode)에 대한 유효한 반올림 모드는 RoundNearestTiesUp(기본값), RoundDown(floor), 및 RoundUp(ceil)입니다.

source

대부분의 Period 값은 지정된 해상도로 반올림할 수도 있습니다:

Base.floorMethod
floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

xprecision의 가장 가까운 배수로 내림합니다. xprecision이 서로 다른 Period의 하위 유형인 경우, 반환 값은 precision과 동일한 유형이 됩니다.

편의를 위해 precision은 값 대신 유형일 수 있습니다: floor(x, Dates.Hour)floor(x, Dates.Hour(1))의 단축키입니다.

julia> floor(Day(16), Week)
2 weeks

julia> floor(Minute(44), Minute(15))
30 minutes

julia> floor(Hour(36), Day)
1 day

Month 또는 Yearprecision으로 반올림하는 것은 지원되지 않습니다. 이러한 Period는 길이가 일관되지 않기 때문입니다.

source
Base.ceilMethod
ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

xprecision의 가장 가까운 배수로 올림합니다. xprecision이 서로 다른 Period의 하위 유형인 경우, 반환 값은 precision과 동일한 유형이 됩니다.

편의를 위해 precision은 값 대신 유형일 수 있습니다: ceil(x, Dates.Hour)ceil(x, Dates.Hour(1))의 단축키입니다.

julia> ceil(Day(16), Week)
3 weeks

julia> ceil(Minute(44), Minute(15))
45 minutes

julia> ceil(Hour(36), Day)
2 days

Month 또는 Yearprecision으로 올림하는 것은 지원되지 않습니다. 이러한 Period는 길이가 일관되지 않기 때문입니다. ```

source
Base.roundMethod
round(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T

xprecision의 가장 가까운 배수로 반올림합니다. xprecision이 서로 다른 Period의 하위 유형인 경우, 반환 값은 precision과 동일한 유형이 됩니다. 기본값(RoundNearestTiesUp)에서는 동점(예: 90분을 가장 가까운 시간으로 반올림할 때)이 위로 반올림됩니다.

편의를 위해 precision은 값 대신 유형일 수 있습니다: round(x, Dates.Hour)round(x, Dates.Hour(1))의 단축키입니다.

julia> round(Day(16), Week)
2 weeks

julia> round(Minute(44), Minute(15))
45 minutes

julia> round(Hour(36), Day)
2 days

round(::Period, ::T, ::RoundingMode)에 대한 유효한 반올림 모드는 RoundNearestTiesUp(기본값), RoundDown(floor), 및 RoundUp(ceil)입니다.

Month 또는 Yearprecision으로 반올림하는 것은 지원되지 않으며, 이러한 Period는 길이가 일관되지 않기 때문입니다.

source

다음 함수는 내보내지지 않습니다:

Dates.floorceilFunction
floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)

주어진 해상도 p에서 Date 또는 DateTimefloorceil을 동시에 반환합니다. floorceil을 개별적으로 호출하는 것보다 더 효율적입니다.

source
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)

주어진 해상도 p에서 Periodfloorceil을 동시에 반환합니다. floorceil을 개별적으로 호출하는 것보다 더 효율적입니다.

source
Dates.epochdays2dateFunction
epochdays2date(days) -> Date

라운딩 에포크(0000-01-01T00:00:00) 이후의 일 수를 받아 해당하는 Date를 반환합니다.

source
Dates.epochms2datetimeFunction
epochms2datetime(milliseconds) -> DateTime

밀리초 단위로 표현된 라운딩 에포크(0000-01-01T00:00:00) 이후의 시간을 받아 해당하는 DateTime을 반환합니다.

source
Dates.date2epochdaysFunction
date2epochdays(dt::Date) -> Int64

주어진 Date를 가져와서 반올림 기준점(0000-01-01T00:00:00) 이후의 일수를 Int64로 반환합니다.

source
Dates.datetime2epochmsFunction
datetime2epochms(dt::DateTime) -> Int64

주어진 DateTime을 가져와서 반올림 기준점(0000-01-01T00:00:00) 이후의 밀리초 수를 Int64로 반환합니다.

source

Conversion Functions

Dates.todayFunction
today() -> Date

now()의 날짜 부분을 반환합니다.

source
Dates.unix2datetimeFunction
unix2datetime(x) -> DateTime

유닉스 에포크 1970-01-01T00:00:00 이후의 초 수를 가져와서 해당하는 DateTime으로 변환합니다.

source
Dates.datetime2unixFunction
datetime2unix(dt::DateTime) -> Float64

주어진 DateTime을 가져와서 유닉스 에포크 1970-01-01T00:00:00 이후의 초 수를 Float64로 반환합니다.

source
Dates.julian2datetimeFunction
julian2datetime(julian_days) -> DateTime

에포크 -4713-11-24T12:00:00 이후의 줄리안 달 수를 받아 해당하는 DateTime을 반환합니다.

source
Dates.datetime2julianFunction
datetime2julian(dt::DateTime) -> Float64

주어진 DateTime을 가져와서 줄리안 시대 -4713-11-24T12:00:00 이후의 줄리안 달 수를 Float64 형식으로 반환합니다.

source
Dates.rata2datetimeFunction
rata2datetime(days) -> DateTime

에포크 0000-12-31T00:00:00 이후의 Rata Die 일 수를 받아 해당하는 DateTime을 반환합니다.

source
Dates.datetime2rataFunction
datetime2rata(dt::TimeType) -> Int64

주어진 Date 또는 DateTime으로부터 에포크 이후의 Rata Die 일 수를 반환합니다.

source

Constants

요일:

VariableAbbr.Value (Int)
MondayMon1
TuesdayTue2
WednesdayWed3
ThursdayThu4
FridayFri5
SaturdaySat6
SundaySun7

연중 월:

VariableAbbr.Value (Int)
JanuaryJan1
FebruaryFeb2
MarchMar3
AprilApr4
MayMay5
JuneJun6
JulyJul7
AugustAug8
SeptemberSep9
OctoberOct10
NovemberNov11
DecemberDec12

Common Date Formatters

Dates.ISODateTimeFormatConstant
Dates.ISODateTimeFormat

날짜와 시간에 대한 ISO8601 형식을 설명합니다. 이것은 DateTimeDates.format에 대한 기본값입니다.

예제

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"
source
Dates.ISODateFormatConstant
Dates.ISODateFormat

날짜에 대한 ISO8601 형식을 설명합니다. 이것은 DateDates.format에 대한 기본값입니다.

예제

julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"
source
Dates.ISOTimeFormatConstant
Dates.ISOTimeFormat

시간에 대한 ISO8601 형식을 설명합니다. 이것은 TimeDates.format에 대한 기본값입니다.

예시

julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"
source
Dates.RFC1123FormatConstant
Dates.RFC1123Format

날짜와 시간에 대한 RFC1123 형식을 설명합니다.

예제

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"Wed, 08 Aug 2018 12:00:43"
source
  • 1The notion of the UT second is actually quite fundamental. There are basically two different notions of time generally accepted, one based on the physical rotation of the earth (one full rotation = 1 day), the other based on the SI second (a fixed, constant value). These are radically different! Think about it, a "UT second", as defined relative to the rotation of the earth, may have a different absolute length depending on the day! Anyway, the fact that Date and DateTime are based on UT seconds is a simplifying, yet honest assumption so that things like leap seconds and all their complexity can be avoided. This basis of time is formally called UT or UT1. Basing types on the UT second basically means that every minute has 60 seconds and every day has 24 hours and leads to more natural calculations when working with calendar dates.