clock 명령어는 현재 시각을 얻거나, 시각과 날짜/시각 형식 간의 상호 변환 기능을 가지고 있습니다.
시각 얻기
현재 시각을 얻는 방법에는 두 가지가 있습니다.
clock clicks은 시스템의 고해상도 시간값을 반환합니다. 이는 CPU의 클럭 틱 단위의 카운트 값을 반환하며, -milliseconds 옵션을 사용하면 밀리초 단위의 카운트 값을 반환합니다.
clock clicks
=> 1089645
clock clicks -milliseconds
=> 983625806
또 다른 방법은 현재 시각을 정수로 반환하는 clock seconds입니다. 새로운 세기(2000년 1월 1일 0시 0분 0초 UTC)부터 경과한 시간을 초 단위로 반환합니다.
clock seconds
=> 1006006782
시각→날짜/시각 형식 변환
현재 시각을 날짜/시각 형식의 문자열로 변환하려면 clock format 명령을 사용합니다. -gmt 옵션을 사용하면 그리니치 표준시(GMT)로 변환할 수 있습니다.
clock format [clock seconds]
=> Sat Nov 17 23:26:38 JST 2001
clock format [clock seconds] -gmt true
=> Sat Nov 16 15:26:38 JST 2001
또한 -format 옵션으로 서식을 지정하여 변환할 수 있습니다.
clock format [clock seconds] -format {%Y/%m/%d(%a) %p %I:%M:%S}
=> 2001/11/17(Sat) PM 11:26:38
-format 옵션에 지정할 수 있는 키워드는 다음과 같습니다.
키워드 | 설명 |
%% | %로 치환함 |
%a | 요일의 축약형 (Mon, Tue, ...) |
%A | 요일 (Monday, Tuesday, ...) |
%b | 월의 축약형 (Jan, Feb, ...) |
%B | 월 (January, February, ...) |
%c | 로케일에 따른 날짜와 시각 |
%d | 일/월 (01 - 31) |
%H | 24시간 형식의 시 (00 - 23) |
%I | 12시간 형식의 시 (00 - 23) |
%j | 일/년 (001 - 366) |
%m | 월 (01 - 12) |
%M | 분 (00 - 59) |
%p | AM 또는 PM |
%S | 초 (00 - 59) |
%U | 주/년 (00 - 52) 일요일을 주의 시작으로 함 |
%w | 주의 번호 (일요일 = 0) |
%W | 주/년 (00 - 52) 월요일을 주의 시작으로 함 |
%x | 로케일에 따른 날짜 |
%X | 로케일에 따른 시각 |
%y | 연도의 축약형 (00 - 99) |
%Y | 연도 (2001 등) |
%Z | 타임존 |
%D | %m/%d/%y 형식의 날짜 |
%e | 일/월 (1 - 31), 앞에 0을 붙이지 않음 |
%h | 월의 축약형 |
%n | 줄바꿈(개행)을 삽입 |
%r | %I:%M:%S %p 형식의 시각 |
%R | %H:%M 형식의 시각 |
%t | 탭을 삽입 |
%T | %H:%M:%S 형식의 시각 |
날짜/시각 형식 → 시각 변환
날짜/시각 형식의 문자열을 시각(초 단위)으로 변환하려면 clock scan 명령을 사용합니다. -gmt 옵션을 사용하면 그리니치 표준시(GMT)로 변환할 수 있습니다.
clock scan {1999-10-31}
=> 941295600
clock scan {1999-10-31} -gmt true
=> 941328000
날짜/시각 형식의 서식은 다음과 같습니다.
# 시각 (meridian = AM 또는 PM)
hh?:mm?:ss?? ?meridian? ?zone?
hhmm ?meridian? ?zone?
# 날짜 (서기 2000년 대응)
mm/dd?/yy?
monthname dd ?, yy?
dd monthname ?yy?
day, dd monthname yy
?CC?yymmdd
?CC?yy-mm-dd
dd-monthname-?CC?yy
# ISO 8601 날짜/시각 형식 (T = 리터럴)
CCyymmddThhmmss
CCyymmdd hhmmss
CCyymmddThh:mm:ss
수식어를 사용하여 상대적 날짜/시각을 지정할 수 있습니다.
clock scan {1999-10-31 3 day}
=> 941554800
clock scan {1999-10-31 4 hour}
=> 941310000
-base 옵션으로 기준 날짜를 지정할 수 있습니다.
clock scan "3 day" -base [clock scan {1999-10-31}]
=> 941554800
clock scan "4 hour" -base [clock scan {1999-10-31}]
=> 941310000
상대적 날짜/시각에 사용할 수 있는 수식어는 다음과 같습니다.
# 단수형
year, fortnight, month, week, day, hour, minute(min), second(sec)
# 복수형
years, fortnights, months, weeks, days, hours, minutes(min), seconds(sec)
# 기타
tomorrow, yesterday, today, now, last, this, next, ago
sunday, monday, tuesday, wednesday, thursday, friday, saturday 등
윤년 확인해 보기
clock을 사용하여 윤년인지 아닌지 확인하는 프로시저입니다. clock 명령어에 맡기면 윤년에 대한 지식은 전혀 필요하지 않습니다.
proc isleapyear {year} {
if {[catch "clock scan 2/29/$year"]} {
return 0
} else {
return 1
}
}
isleapyear 2000
=> 1
isleapyear 2001
=> 0