The Date 구조

The Date 구조

Date 구조는 시간과 날짜 사이를 변환하고 날짜를 형식화·스캔하는 함수를 제공해요.

출처: 문서

본문

시놉시스 (Synopsis)

signature DATE
structure Date :> DATE

인터페이스 (Interface)

datatype weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun
datatype month
= Jan
| Feb
| Mar
| Apr
| May
| Jun
| Jul
| Aug
| Sep
| Oct
| Nov
| Dec
type date
exception Date
val date : {
year : int,
month : month,
day : int,
hour : int,
minute : int,
second : int,
offset : Time.time option
} -> date
val year : date -> int
val month : date -> month
val day : date -> int
val hour : date -> int
val minute : date -> int
val second : date -> int
val weekDay : date -> weekday
val yearDay : date -> int
val offset : date -> Time.time option
val isDst : date -> bool option
val localOffset : unit -> Time.time
val fromTimeLocal : Time.time -> date
val fromTimeUniv : Time.time -> date
val toTime : date -> Time.time
val compare : date * date -> order
val fmt : string -> date -> string
val toString : date -> string
val scan : (char, 'a) StringCvt.reader
-> (date, 'a) StringCvt.reader
val fromString : string -> date option

설명 (Description)

type date

주어진 시간대의 한 순간을 나타내는 값들의 추상 타입이에요.

val date : {
year : int,
month : month,
day : int,
hour : int,
minute : int,
second : int,
offset : Time.time option
} -> date

주어진 날짜 정보에서 정준(canonical) 날짜를 만들어요. 결과 날짜가 구현이 지원하는 범위 밖이면 Date 예외가 발생해요. [0,59] 범위 밖의 초는 동등한 분으로 변환되어 분 인자에 더해져요. 분에서 시, 시에서 일, 일에서 월, 월에서 연으로도 비슷한 변환이 수행돼요. 음수 값도 다음으로 큰 단위에서 빌려와 정준 범위로 변환돼요. 예를 들어 minute = 10, second = ~140은 minute = 7, second = 40이 돼요. offset 인자는 시간대 정보를 제공해요. NONE은 로컬 시간대를 나타내고, SOME(t)는 UTC 서쪽으로 t만큼 떨어진 시간에 해당해요. 특히 SOME(Time.zeroTime)은 UTC예요. 관례대로 음의 오프셋은 UTC 동쪽 시간대를 나타내요. 오프셋은 24시간 모듈로로 취해요. 윤년은 그레고리력을 따르고, 윤초는 무시될 수도 있어요.

val year : date -> int
val month : date -> month
val day : date -> int
val hour : date -> int
val minute : date -> int
val second : date -> int
val weekDay : date -> weekday
val yearDay : date -> int
val offset : date -> Time.time option
val isDst : date -> bool option

이 함수들은 날짜 값의 속성을 추출해요. year가 돌려주는 연도는 0년을 기준으로 해요. yearDay는 0부터 시작하는 연중 일수를 돌려주는데, 1월 1일은 0일이에요. offset이 돌려주는 값은 UTC 서쪽 시간 양으로 시간대 정보를 보고해요. NONE은 로컬 시간대를 나타내요. isDst는 시스템에 일광 절약 시간 정보가 없으면 NONE을 돌려주고, 있으면 일광 절약 시간이 적용 중이면 true인 SOME(dst)를 돌려줘요.

val localOffset : unit -> Time.time

로컬 시간대의 UTC로부터의 오프셋이에요.

fromTimeLocal t

이 함수들은 (UTC) 시간 t를 해당 날짜로 변환해요. fromTimeLocal은 로컬 시간대의 날짜를 나타내고 ISO C 함수 localtime과 유사해요. 돌아오는 날짜의 offset은 NONE이에요. fromTimeUniv는 UTC 시간대의 날짜를 돌려주고 ISO C 함수 gmtime과 유사해요. 돌아오는 날짜의 offset은 SOME(0)이에요. 같은 시간 값에 적용하면 결과 날짜는 로컬 시간대의 UTC 오프셋만큼 달라져요.

fromTimeUniv t

날짜 date에 대응하는 (UTC) 시간을 돌려줘요. date를 Time.time 값으로 표현할 수 없으면 Date를 발생시켜요. ISO C 함수 mktime과 유사해요.

toTime date

date1이 date2보다 앞서는지, 같거나, 뒤에 오는지에 따라 LESS, EQUAL, GREATER를 돌려줘요. 연·월·일·시·분·초 정보로 사전 비교하지만 오프셋과 일광 절약 시간 정보는 무시해요. 잘못된 날짜는 감지하지 않아요. 서로 다른 두 시간대의 날짜를 비교하려면 사용자가 정규화를 처리해야 해요.

compare (date1, date2)

이 함수들은 날짜 date의 문자열 표현을 돌려줘요. 날짜가 표현 가능한 Time.time 범위 밖이면 결과가 틀릴 수 있고, 주어진 날짜가 유효하지 않으면 Date를 발생시켜요. 전자는 ISO C 함수 strftime의 의미를 따라 형식 문자열 s로 날짜를 형식화해요. 특히 fmt는 로케일 의존적이에요. toString은 다음 형식의 24자 문자열을 돌려줘요. Date.fmt "%a %b %d %H:%M:%S %Y"와 동등해요.

fmt s date

이 함수들은 가능한 앞 공백을 무시하고 문자 소스에서 24자 날짜를 스캔해요. 문자열 형식은 toString이 만드는 것과 정확히 같아야 해요. 특히 함수들은 시간대 약어를 파싱하지 않아요. 날짜의 일관성(요일, 월 중 날짜 등)은 검사하지 않아요. 스캔에 실패하면 NONE이 돌아가요. scan은 문자 스트림 리더 getc와 스트림 strm을 받아서, 성공 시 SOME(date, rest)를 돌려주고 date는 스캔한 날짜, rest는 스트림 나머지예요. fromString은 문자열 s를 문자 소스로 받으며 StringCvt.scanString scan과 동등해요.

toString date

이 함수들은 날짜 date의 문자열 표현을 돌려줘요. 날짜가 표현 가능한 Time.time 범위 밖이면 결과가 틀릴 수 있어요. 주어진 날짜가 유효하지 않으면 Date를 발생시켜요. 전자는 ISO C 함수 strftime의 의미를 따라 형식 문자열 s로 날짜를 형식화해요. 특히 fmt는 로케일 의존적이에요. 허용되는 형식은 다음과 같아요: %a 로케일의 약식 요일 이름 %A 로케일의 전체 요일 이름 %b 로케일의 약식 월 이름 %B 로케일의 전체 월 이름 %c 로케일의 날짜·시간 표현 (예: "Dec 2 06:55:15 1979") %d 월 중 일 [01-31] %H 시 [00-23] %I 시 [01-12] %j 연중 일 [001-366] %m 월 번호 [01-12] %M 분 [00-59] %p 로케일의 오전/오후 표기 %S 초 [00-61] %U 연중 주 번호 [00-53], 첫 번째 일요일이 01주의 첫 날 %w 요일 [0-6], 0은 일요일 %W 연중 주 번호 [00-53], 첫 번째 월요일이 01주의 첫 날 %x 로케일에 맞는 날짜 표현 %X 로케일에 맞는 시간 표현 %y 세기 내 연도 [00-99] %Y 세기 포함 연도 (예: 1997) %Z 시간대 이름이나 약어, 시간대 정보가 없으면 빈 문자열 %% 퍼센트 문자 %c 위에 나열된 형식 문자가 아닌 c라면 문자 c. 예를 들어 fmt "%A" date는 date가 지정하는 요일의 전체 이름 (예: "Monday")을 돌려줘요. 형식 문자열 구문에 대한 전체 설명은 strftime에 대한 설명을 참고하세요. 단 strftime과 달리 fmt의 동작은 임의의 문자 c에 대해 %c 지시어가 정의된다는 점에 유의하세요. toString은 다음 형식으로 날짜 date를 나타내는 24자 문자열을 돌려줘요. 이 함수는 Date.fmt "%a %b %d %H:%M:%S %Y"와 동등해요.

"Wed Mar 08 19:06:45 1995"

scan getc strm

fromString s

이 함수들은 가능한 앞 공백을 무시하고 문자 소스에서 24자 날짜를 스캔해요. 문자열 형식은 toString이 만드는 것과 정확히 같아야 해요. 특히 이 함수들은 시간대 약어를 파싱하지 않아요. 날짜의 일관성(요일, 월 중 날짜 등)은 검사하지 않아요. 스캔에 실패하면 NONE이 반환돼요. scan 함수는 문자 스트림 리더 getc와 스트림 strm을 받아요. 성공 시 SOME(date, rest)를 돌려주는데, date는 스캔한 날짜, rest는 스트림 나머지예요. fromString 함수는 문자열 s를 문자 소스로 받아요. StringCvt.scanString scan과 동등해요.

더 알아보기 (Learn more)