현재 시각을 컨솔에 보여주는 간단한 애플리케이션의 Python 언어 소스 코드이다.
UTC란 1970년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초 단위의 총 시간을 의미한다.
* UTC(Universal Time Coordinated, 협정세계시, 協定世界時)
Common Lisp 언어에서 (get-universal-time) 하여 얻은 값은 UTC(1970년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초)가 아니라, 1900년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초이다. 따라서 이 값을 기준으로 UTC를 구하려면 1900년 1월 1일 0시 0분 0초부터 1970년 1월 1일 0시 0분 0초까지 경과된 초를 구하여 빼 주어야 나온다. 그런데 Common Lisp 언어에서는 GMT 시각값을 초로 환산하여 보정해주어야 제대로 된 UTC 값을 구할 수 있다.
GMT 시각값을 초로 환산한 값이 (* (nth 8 cNow) 60 60) 이고, 이 만큼 보정하는 과정이 아래 소스의 20째 줄
(setf utctime (+ (- univ-time *base*) (- *base2* *base*) (* (nth 8 cNow) 60 60)))
이다. 여기서 (* (nth 8 cNow) 는 GMT 시각값의 반대 부호이다.
- #!/usr/bin/env clisp
- ;; Filename: testCTime.lsp
- ;;
- ;; Execute: clisp testCTime.lsp
- ;; Common Lisp case
- (setf *weekNames* (list "월" "화" "수" "목" "금" "토" "일"))
- (setf univ-time (get-universal-time))
- (setf cNow (multiple-value-list (decode-universal-time univ-time)))
- (setq *base* (encode-universal-time 0 0 0 1 1 1971))
- (setq *base2* (encode-universal-time 0 0 0 1 1 1972))
- (setq *takeoff* (encode-universal-time 0 0 0 1 1 2013))
- (setq *takeoff2* (encode-universal-time 0 0 0 2 1 2013))
- (setq *one-day-secs* (- *takeoff2* *takeoff*))
- (setq *secs* univ-time)
- (setq *daysecs* (- *secs* *takeoff*))
- (setf utctime (+ (- univ-time *base*) (- *base2* *base*) (* (nth 8 cNow) 60 60)))
- (format t "UTC: ~D초~%" utctime)
- ;; 현재 시각 표시: 200x년 x월 xx일 (x요일) xx시 xx분 xx초 (GMT nn)
- (format t "~D년 ~D월 ~D일 (~A요일) ~D시 ~D분 ~D초 (GMT~@D)~%"
- (nth 5 cNow)
- (nth 4 cNow)
- (nth 3 cNow)
- (nth (nth 6 cNow) *weekNames*)
- (nth 2 cNow)
- (nth 1 cNow)
- (nth 0 cNow)
- (- (nth 8 cNow)) )
- ;; 1월 1일은 1, 1월 2일은 2
- (setf strIsDST (if (equal (nth 7 cNow) nil)
- "안함"
- "함" ) )
- (setq *days* (1+ (floor *daysecs* *one-day-secs*)))
- (format t "올해 몇 번째 날: ~D, 서머타임 적용 여부: ~A~%" *days* strIsDST)
실행> clisp testCTime.lsp
UTC: 1378044909초
2013년 9월 1일 (일요일) 23시 15분 9초 (GMT+9)
올해 몇 번째 날: 244, 서머타임 적용 여부: 안함
'프로그래밍 > Common Lisp' 카테고리의 다른 글
대화형 모드의 진법(radix) 변환 예제 with Common Lisp (0) | 2013.09.02 |
---|---|
황금비율(golden ratio) 구하기 with Common Lisp (0) | 2013.09.01 |
조립제법(Horner의 방법) 예제 for Common Lisp (0) | 2013.08.30 |
80컬럼 컨솔에 19단표 출력하기 예제 for Common Lisp (0) | 2013.08.29 |
(최대공약수 구하기) while... 반복문 예제 for Common Lisp (0) | 2013.08.29 |