綾小路龍之介の素人思考

[時刻表示] 時刻表示にまつわるエトセトラ

D:\>perl -e "($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);$year+=1900;$mon+=1; print \"$year/$mon\""
2005/10
D:\>

WindowsMEには時刻表示機能がないの何でだろー。

D:\>perl -le "@D=localtime(time); $D[5]+=1900; $D[4]+=1; foreach (@D){print}"
41
49
22
30
10
2005
0
302
0
D:\>

覚えてしまえlocaltimeで渡される配列。さすれば、あーんなこともこーんな事も自由自在だったりする。

D:\>perl -e "@D=localtime(time); $D[5]+=1900; $D[4]+=1; print \"$D[5]/$D[4]/$D[3] $D[2]:$D[1]:$D[0]\""
2005/10/30 22:52:34
D:\>

localtimeの引数を省略するとtimeを引数に取ったことと同じになるので、下のようにしても同じ。短さ追求ならこちらのほうがいいかな。

D:\>perl -e "@D=localtime; $D[5]+=1900; $D[4]+=1; print \"$D[5]/$D[4]/$D[3] $D[2]:$D[1]:$D[0]\""
2005/10/30 22:52:34
D:\>

短さを追求してわかりやすさを捨てた結果。

D:\>perl -e "@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\""
2005/9/30 23:44:59
D:\>

あんまり美しくはないけれど。というかやめたほうがいいかも。上よりも長いし、出力内容見にくいし。

D:\>perl -le "@D[0..5]=localtime(time); $D[5]+=1900; $D[4]+=1; $\"='/'; @D=reverse @D; print \"@D[0..5]\";"
2005/10/30/23/7/1
D:\>

遊んでみるとこうなる。1秒ごとに時間を出力。意味はない。

D:\>perl -le "while(1){@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\"; sleep(1);}"
2005/9/31 0:3:28
2005/9/31 0:3:28
2005/9/31 0:3:29
2005/9/31 0:3:30
2005/9/31 0:3:31
2005/9/31 0:3:33
2005/9/31 0:3:33
2005/9/31 0:3:34
Terminating on signal SIGINT(2)
D:\>

おばかな応用として、ラーメンタイマー改にしてみる。

D:\>perl -le "for(1..6){@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\a\"; sleep(30);} print\"\a\a\a\";"
2005/9/31 0:9:17
2005/9/31 0:9:47
2005/9/31 0:10:17
2005/9/31 0:10:47
2005/9/31 0:11:17
2005/9/31 0:11:47
D:\>

localtimeを文字列で評価すると人間にもわかる(つまり何時何分何秒)という形式で表示される。

$file_inf=localtime((stat($file))[9]);

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-01-02T02:29:19+09:00
  2. Modified: 2008-01-02T05:19:48+09:00
  3. Generated: 2017-03-09T23:09:31+09:00