Hatena::ブログ(Diary)

みずぴー日記 Twitter

2009-04-14(火)

世界時計

| 世界時計を含むブックマーク

30分プログラム、その566。世界時計 via エロと風俗情報満載 どう抜く?

プログラムを実行した端末のロケールと、グリニッジ標準時と、ロサンゼルスの現在時刻をそれぞれ表示してください。時刻の表示はリアルタイムでなく、一回限りで構いません。時刻のフォーマットは自由とします。

1 出力例

2 現在の時刻は、2008年10月29日 11時36分21秒です。

3 グリニッジ標準時刻は、2008年10月29日 2時36分21秒です。

4 アメリカロサンゼルスの時刻は、2008年10月28日 19時36分21秒です。

ようするに、日本の時刻とGMTロサンゼルスの時刻を出せばいいんだよね。

本当はロサンゼルスの時刻はサマータイムを考慮にいれないといけないんだけど、ちょっと大変なので忘れることにしよう。とりあえず、あと7ヶ月ほどは正解を出力するはず。

使い方

$ gosh world.scm
現在の時刻 2009-04-14T21:59:17
グリニッジ標準時刻 2009-04-14T12:59:17
アメリカ・ロサンゼルスの時刻 2009-04-14T05:59:17

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; world.scm -
;;
;; Copyright(C) 2009 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2009/04/14 21:41:24
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use srfi-19)

(define (show name date)
  (print (date->string date #`",name ~5")))

(define now (current-time 'time-utc))

(show "現在の時刻"
      (time-utc->date now (* 9 60 60)))
(show "グリニッジ標準時刻"
      (time-utc->date now 0))
(show "アメリカ・ロサンゼルスの時刻"
      (time-utc->date now (* -7 60 60)))

参考

YuichirouYuichirou 2009/04/14 22:23 そこは明日うまくOCamlの特長を伝えながら私に書かせるべきだったのではないかと愚考します……

mzpmzp 2009/04/15 10:22 OCamlのオブジェクトシステムには、そこまで詳しくないので無理です><。

osiireosiire 2009/04/15 10:57 printfでオブジェクトを作る時の引数であるnameを参照しちゃ、内部にデータを保持するというオブジェクト指向の特徴(?)が表現できませんぜ。
class welcome name = object (self)
method get_name = name
method say = Printf.printf "こんにちは、%s!\n" self#get_name
end