
No.3ベストアンサー
- 回答日時:
まず、次の点を意識してください。
○ Perlにとっては、それは「ただの文字列」であって、「時刻」などではない
○ 文字列を数値演算しようとすると、「先頭の数値と見做せる箇所」が表す数値に変換される
$ip[1]='2013-02-12 17:03:45'
$time='2013-02-12 20:27:26'
の場合
$time=$time-$ip[1];
これは
・ - による数値演算 → 両辺は数値と見做す
・ '2013-02-12 20:27:26' → これは只の文字列。先頭の2013だけが数値と見做せるので、 2013 という数値に変換
・ '2013-02-12 17:03:45' → これは只の文字列。先頭の2013だけが数値と見做せるので、 2013 という数値に変換
→$time= 2013 - 2013 = 0
となり、その「0」と出力されるのが「Perlとして正しい動作」です。
日付の計算をしたいのなら
○DateTimeモジュール等を利用する
○$ip[1]を分解して、timelocal等で epoch秒を計算、 localtimeと比較する
○$ip[1]を分解して、$sec,$min,$hour,$mday,$mon,$yearとそれぞれ比較、集計して差を求める
等の手段を使う必要があります。
No.2
- 回答日時:
$ip[0] の値もわからんし「正しい時間」とやらがどのようなものなのかもわからん.
この回答への補足
申し訳ありません。記述ミスがありました。
$ip[0]ではなく、$ip[1]でした。
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$time = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
open(OUT, "< test2.csv");
while($data = <OUT>){
chomp($data);
@ip = split(/,/,$data);
print qq!$ip[1]<br>$time<br>!;
$time=$time-$ip[1];
print qq!$time<br>!;
### 出力結果 ###
2013-02-12 17:03:45
2013-02-12 20:27:26
0
######
$ip[1]には、最終アクセスした時間が入っています。
2013-02-12 17:03:45
$time には現在の時刻です。
2013-02-12 20:27:26
よろしくお願いします。
No.1
- 回答日時:
どんなソースでどんな結果(エラー)になって実際は何がしたいのか、を書かないと何とも言えないですよ。
この回答への補足
恐れ入ります。説明が不足していました。
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$time = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
open(OUT, "< test2.csv");
while($data = <OUT>){
chomp($data);
@ip = split(/,/,$data);
print qq!$ip[1]<br>$time<br>!;
$time=$time-$ip[0];
print qq!$time<br>!;
### 出力結果 ###
2013-02-12 17:03:45
2013-02-12 20:27:26
2013
######
となります。2段目と1段目の差が
2013という結果です。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字コードの変換(Shift-JISか...
-
Perlでエラーログに日時をつける
-
log2の「正確な」計算方法
-
[Perl]ファイル出力のエンコー...
-
AccessVBA エクセル出力時にエ...
-
ListBoxのデータを高速でファイ...
-
open中のファイルをrename
-
ADOによるCSVファイルからのデ...
-
複数ファイルを1つにするシェ...
-
FindFirstFileとFindNextFileで...
-
Windowsで複数のファイルを同じ...
-
VB6で"r"みたいな文字が返って...
-
【C++/CLI】ファイルオープンに...
-
MATLAB グローバル変数の宣言
-
Windows漢字フォルダ名の扱い(...
-
C++でのテキストファイル読み込...
-
【エクセル】改行無しテキスト...
-
VBAで巨大なファイルの途中から...
-
正規表現で、特定のファイル名...
-
C言語で特定の行を抽出する方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
DOSコマンドで、標準出力を出力...
-
[Perl]ファイル出力のエンコー...
-
文字コードの変換(Shift-JISか...
-
重複するデータを抽出できる秀...
-
エクセルVBAで素数だけを出力す...
-
テキストファイルから日本語部...
-
HTML::Templateの空行について
-
教えて!perlから.exeファイル...
-
ファイル出力の改行コードをLFに
-
Perlでファイルの末尾から指定...
-
Perl<->Oracle間での文字化けに...
-
エディターでは改行なのにメモ...
-
バッチファイルで、記号を含む...
-
ファイル内のキーを元に別のフ...
-
Perl で出力するHTMLファイルを...
-
timeコマンドの結果をテキスト...
-
Perlで着メロDLカウント
-
エクセルVBA コードが同じでも...
おすすめ情報