FC2ブログ
--
--.--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008
11.07

今日のLua 世界時計

Category: lua   Tags:luaプログラミング
どう書く.org
で、

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

出力例
現在の時刻は、2008年10月29日 11時36分21秒です。
グリニッジ標準時刻は、2008年10月29日 2時36分21秒です。
アメリカ・ロサンゼルスの時刻は、2008年10月28日 19時36分21秒です。



というのがあったので、lua で書いてみることにします。

print(os.date("現在の時刻は、%Y年%月%d日 %H時%M分%S秒です"))
print(os.date("!現在の時刻は、%Y年%月%d日 %H時%M分%S秒です"))



! をつけると、UTC での時間になるそうで。

format が `!´ で始まっていたら、日付は世界時 (Universal Time) で書式化される。


とマニュアルにあります。

残りは、ロサンゼルスの時間です。

カリフォルニア州なので、UTC-8。

os.setlocale というので、ロケールを変更できるっぽいので、変更してほげほげしたらなんとかなるか?

$ lua -e 'print(os.setlocale ())'
C


引数なしで呼ぶと、現在のロケールが返ってくる。

$ lua -e 'print(os.date())'
Fri Nov 7 16:38:30 2008



しかし、おもいっきり日本時間…。どっか別のところ見てる気がしてならないんだ。

$ lua -e 'print(os.setlocale ("no_NO"))'
nil


nil は失敗…。

どうしたらいいんだー。

っと、わかった。各種ロケールが使えるようになってない!

# dpkg-reconfigure locales


で、en_CA.UTF-8 を追加

$ lua -e 'print(os.setlocale ("en_CA.UTF-8"))'
en_CA.UTF-8


キタコレ
しかし、時間はそのまま。一体どこを見ていると言うのだ?

てか、ローカルのロケール変えても、全然変化がないんだよね。

カリフォルニアのタイムゾーンは、PST なので、こんな風にすれば

$ export TZ=PST
$ date
Fri Nov 7 08:04:48 UTC 2008


一応出てるっぽいが。。

なんと。調べたら書き方がまずったようで。

$ export TZ=America/Los_Angeles
$ date
Fri Nov 7 00:17:49 PST 2008



成功しました、やっと。。何やってんだか(わら
タイムゾーンの名前は、/usr/share/zoneinfo/ の下の ファイル名をそのまま書けばいいようです。つまり、/usr/share/zoneinfo/America/Los_Angeles というファイルが存在するということであります。

$ lua time.lua
現在の時刻は、2008年11月07日 17時25分49秒です
グリニッジ標準時刻は、2008年11月07日 08時25分49秒です
アメリカ・ロサンゼルスの時刻は、2008年11月07日 00時25分49秒です



でーきーたー!!!!!!

で、お待ちかねのコードです。

print(os.date("現在の時刻は、%Y年%m月%d日 %H時%M分%S秒です"))
print(os.date("!グリニッジ標準の時刻は、%Y年%m月%d日 %H時%M分%S秒です"))
os.execute('export TZ=America/Los_Angeles; lua -e "print(os.date(\'アメリカ・ロサンゼルスの時刻は、%Y年%m月%d日 %H時%M分%S秒です\'))"')











さて、逃げます!




スポンサーサイト
Comment:4  Trackback:0
2008
11.07

今日のLua 標準入力をほげほげ

Category: lua   Tags:luaプログラミング
CGIを書くには、標準入力からの値の取得は必須なので、
色々やってみました。

標準入力からの値を取得するには

$ lua -e 'print(io.read("*a"))' < なんかファイルとか



io.read() では、どのように読み込むかのフォーマットを指定できます。

マニュアルによれば


"*n" は数値を読み込む。これは文字列の変わりに数値を読み込む唯一の書式である。
"*a" は現在の位置から、残りのファイル全体を読み込む。ファイルの終わりでは、空文字列を返す。
"*l" は次の行を読み込む (行末文字は飛ばす)。ファイルの終わりでは nil を返す。これはデフォルトの書式である。
数値 はその文字数からなる文字列を読み込む。ファイルの終わりでは空文字列を返す。数値がゼロの場合は、何も読み込まず、空文字列を返す。ファイルの終わりでは nil を返す。



では、中身が

a
1
23
456
7890
aaa
aa



という中身のファイル aaa を作って実験してみます。

$ lua -e 'print(io.read("*l"))' < aaaa
a


次の行なので、1行目が出力されます。デフォルト。

$ lua -e 'print(io.read("*n"))' < aaaa
nil


数値ではないから、nil?

$ lua -e 'print(io.read(1))' < aaaa
a


1文字だけ読み込みます。改行も文字数として解釈されている模様。

$ lua -e 'print(io.read(2))' < aaaa
a


$ lua -e 'print(io.read(3))' < aaaa
a
1



では、マルチバイトはどうなるかやってみましょう。


いう
えおか


って中身のファイル bbbb を作りました。

$ lua -e 'print(io.read(1))' < bbbb


!!!!

lua -e 'print(io.read(2))' < bbbb


$ lua -e 'print(io.read(3))' < bbbb


文字数ではなくて、バイト数ってのが正しそうですね。。


ちなみに、ファイル名を指定してあげたい場合は
io.open("ファイル名"):read("*a")
とかしてあげるといいです。


Comment:0  Trackback:0
2008
11.05

Luaで日付時間操作。

Category: lua   Tags:lua
色々試してみるコーナー。

lua で日付をごにょごにょするのは、os.date() です。

$ lua -e 'print(os.date())'
Wed Nov 5 14:34:06 2008


引数なしで呼ぶと、今の日時が表示されます。

$ lua -e 'print(os.date("*t"))'
table: 0x962fdd0


第一引数はフォーマット。 *t というのを指定すると、
year , month などが入ったテーブルが返ります。

$ lua -e 'for k,v in pairs(os.date("*t")) do print(k) end'
hour
min
wday
day
month
year
sec
yday
isdst



年だけさくっと取得したい場合は

$ lua -e 'print(os.date("*t").year)'
2008


こんな感じでできちゃいます。

$ lua -e 'print(os.date("%Y"))'
2008


これでもいいですが。

フォーマットは、unix コマンドの、date と同じっぽいです。

man date してみると、

時刻フィールド
%H 時 (00..23)
%I 時 (01..12)
%k 時 (0..23)
%l 時 (1..12)
%M 分 (00..59)
%p AM あるいは PM のロケール
%r 時刻、12 時間 (hh:mm:ss [AP]M)
%s 1970-01-01 00:00:00 UTC からの秒数 (標準外の拡張)
%S 秒 (00..60)
%T 時刻、24 時間 (hh:mm:ss)
%X ロケールによる時刻の表現 (%H:%M:%S)
%Z タイムゾーン (例 EDT)、あるいはタイムゾーンが決定できないならば無し

日付フィールド
%a ロケールの省略形の曜日名 (Sun..Sat)
%A ロケールの完全表記の曜日名、可変長 (Sunday..Saturday)
%b ロケールの省略形の月名 (Jan..Dec)
%B ロケールの完全表記の月名、可変長 (January..December)
%c ロケールの日付と時刻 (Sat Nov 04 12:02:33 EST 1989)
%d 月内通算日数 (01..31)
%D 日付 (mm/dd/yy)
%h %b と同じ
%j 年内通算日数 (001..366)
%m 月 (01..12)
%U 日曜日を週の最初の日とした年内通算週 (00..53)
%w 週のうちの曜日 (0..6) (0 が日曜日)
%W 月曜日を週の最初の日とした年内通算週 (00..53)
%x ロケールの日付表現 (mm/dd/yy)
%y 年の最後の 2 つの数字 (00..99)
%Y 年 (1970...)

文字フィールド
%% 文字 %
%n 改行
%t 水平タブ


とあるので、参考にしてください。

第二引数は、変換したいunix timeをいれます。デフォルトでは、今です。

$ lua -e 'print(os.date(nil,0))'
Thu Jan 1 09:00:00 1970


フォーマットを指定したくない場合は、nil を入れてあげるとよいようです。

$ lua -e 'print(os.date(nil,-100000))'
Wed Dec 31 05:13:20 1969


マイナスも大丈夫でした。
Comment:0  Trackback:0
2008
10.31

今日のlua ファイルを開く

Category: lua
あんま時間取れなかったので、ちょっとだけ。
少しずつでもやっていくよぉー!

--fileopen.lua
file = io.open('ファイル名')
while file:read() do print(file:read()) end



$ lua fileopen.lua

とか。

もっと綺麗にかけそうな気がするのですが。。

perl で言うところの、$_ みたいなのはないのかな?

Comment:0  Trackback:0
2008
10.30

lua で mysql

できたのでめもめも。

$ sudo apt-get install liblua5.1-sql-mysql-dev



で、ライブラリをいんすとーる。

require "luasql.mysql"

env = luasql.mysql()
conn = env:connect('test','root')
cur = conn:execute('select * from test')
print(cur:numrows())



こんな感じで書けば、とりあえず接続なども可能。

詳しくは、LuaSQLのサイトを見るのだ。

うー、なんと簡単なんだ。

Comment:0  Trackback:0
back-to-top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。