본문으로 바로가기

Tcl의 클럭

category 카테고리 없음 2025. 8. 13. 17:09

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