Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-08-26

KMRCLを眺める(193) POSIX-TIME-TO-UTIME

| 12:24 | KMRCLを眺める(193) POSIX-TIME-TO-UTIME - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(193) POSIX-TIME-TO-UTIME - わだばLisperになる

今回は、KMRCLのdatetime.lispからPOSIX-TIME-TO-UTIMEです。

Common LispのUniversal Timeは、1900/1/1 0:00からスタートになります。

Posix timeとは70年ずれているわけですが、POSIX-TIME-TO-UTIMEは違いを変換するものです。

(LET ((UT (GET-UNIVERSAL-TIME))
      (PT (PARSE-INTEGER (VALUES (KL:COMMAND-OUTPUT "date +%s")))))
  (LIST :UT UT
        :PT->UT (KL:POSIX-TIME-TO-UTIME PT)))
;⇒ (:UT 3491782344 :PT->UT 3491782344)

定義は、単に70年を足しているだけです。

(defconstant +posix-epoch+
  (encode-universal-time 0 0 0 1 1 1970 0))

(defun posix-time-to-utime (time)
  (+ time +posix-epoch+))