30分経過判断方法とは?

このQ&Aのポイント
  • 30分経過したかどうかを判断する方法について質問しています。
  • 現在の日付と前回の日付を比較して、30分以上経過しているかどうかを判定したいです。
  • 文字列で比較する方法や、各時間の大小を比較する方法を知りたいです。
回答を見る
  • ベストアンサー

30分経過したかどうかの判断

以下のコードで $nowdate(sprintf変換)で日付を得ています。 ($ss,$mn, $hh, $dd, $mm, $yy) = localtime(time); $yy -= 100; $mm++; $nowdate = sprintf("%02d/%02d/%02d_%02d:%02d:%02d:"   ,$yy,$mm,$dd,$hh,$mn,$ss); $nowdate を次に取得した時に、前の$nowdateから30分経過して いるかそうでないかを知りたいのです。なお、前の$nowdateは ファイルに保存しておきその都度読み出すことにしました。 前後で時間を比較するのは、文字列で比較してしまうこと事態が 間違っているのでしょうか。(普通に考えてそうですね) やはり、$yyの大小、$mmの大小・・・という具合に一つ一つ処理 していくしかないのでしょうか。 いいアイデアがあれば教えて下さい。

  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

文字列化してしまうとかなり面倒ですね。 自分がやるなら、time関数の返値をそのまま保存し、比較します。 # $zenkaitime ファイルから読み出した前回のtimeの値 if((time - $zenkaitime) > 30*60) { # 30分以上経過していた場合の処理 } else { }

myfrend
質問者

お礼

回答どうもありがとうございました。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

#1です。 既に文字列化したデータが存在してしまっているなら、 timelocalというlocaltimeと逆のことをするモジュールもあります。(標準モジュールですので宣言は入りますが通常はインストールの必要はありません。) http://cocohome.hp.infoseek.co.jp/cocohome/l_nisukeisan.html

myfrend
質問者

お礼

回答どうもありがとうございました。 timelocalは、はじめて知りました。

関連するQ&A

  • UTF8でperlスクリプトを書くと年月日が表示しない

    UTF-8で下記スクリプトを書いて実行すると、 $yy年$mo月$dd日 にあたる部分が表示されず、($day)$hh:$mm:$ss の部分しか表示されません。 ------------------------------------ #!/usr/bin/perl use utf8; use Encode; &get_date(); print "Content-type: text/html\;charset=utf-8\n\n"; print encode('utf8',"$date"); exit; sub get_date { ($ss,$mm,$hh,$dd,$mo,$yy,$day)= localtime(time); $day = ("日","月","火","水","木","金","土")[$day]; $yy = $yy+1900; $mo++; if ( $mo < 10 ) { $mo = "0$mo"; } if ( $dd < 10 ) { $dd = "0$dd"; } if ( $hh < 10 ) { $hh = "0$hh"; } if ( $mm < 10 ) { $mm = "0$mm"; } if ( $ss < 10 ) { $ss = "0$ss"; } $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; } ------------------------------ EUCコードでスクリプトを書いてencodeなど不要な部分を変更した場合は$yy年$mo月$dd日の部分も表示されます。 また、上記  $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss"; の部分を下記のように変更すると表示されますが... -------------------------- $date = $yy; $date .="年"; $date .= $mo; $date .="月"; $date .= $dd; $date .="日"; $date .="($day)$hh:$mm:$ss"; -------------------------- なぜ一括してダブルクォートで囲むと表示されないのでしょうか? 今まではEUCでスクリプトを書いておりました。UTF8に翻弄されております... どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • log4jが連続して同じログを

    JSFにて、log4jでログファイルにログ出力を行っているのですが、一回のログ出力メソッド呼び出しで、同じログが2~8行出力されてしまいます。 例) yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... yy/MM/dd HH:mm:ss.853, WARN , .... ミリ秒単位で同じなので、一回出力されれば十分なのですが、複数行出力されています。 短時間で、かなりのサイズになってしまうため、困惑しております。 この事象の解決方法をご存じの方、解決方法をご教示願います。

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • javaで時刻の判定

    String型のtimeに YYYY-MM-DD HH:MM:SS の形式である時刻が入っているとします. この時刻がYYYY年MM月DD日の20時00分00秒~23時59分59秒内であるかどうかを判定するにはどうしたらよいでしょうか? 文字列のままでは大小比較は困難な気がしますし、GregorianCalendar型もみてみたのですが、いまいち大小比較の仕方がわかりませんでした。 よろしくおねがいします

  • 【PL/SQL】DATE型の時刻の表示と非表示

    PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

  • Formatでmmが月と分を意味する理由

    日時をFormat関数を使って所望の書式に変更したいのですが http://excelvba.pc-users.net/func/func3.html このページにあるようになぜかmmには 月と分という二つの異なるものが割り当てられています。 yyyymmdd のようにyyyyやddと一緒に書くと月となり、 mmのように単体で書いても月になり、 hh:mm:ss のようにhhやssと一緒に書くと分として扱われます。 では、 分だけを単体で取り出したい場合にはどうしたら良いのでしょうか? yyyymmss とかに年と時間を混ぜたらどうなるのでしょうか? 月と分をちゃんと使い分ける方法があれば教えてください。

  • MySQLのTimestamp(14)型のフィールドにYYYY/MM/DD hh:mm形式のデータをインサートするには

    MySQLのTimestamp(14)型のフィールドに YYYY/MM/DD hh:mm形式のデータをインサートするには どのようにしたらよいのでしょうか? MySQL の Timestamp(14)型(YYYY-MM-DD hh:mm:ss)のフィールドに YYYY/MM/DD hh:mm 形式のデータ(ssに該当するデータがない)を インサートするには、 PHPでどのようにしたらよいのでしょうか? できれば、インサートの際にssに自動的に00をつけたいです。 現在、PHPでinsert文を実行すると、データの桁数が足りないため、 フィールドの値は、0000-00-00 00:00:00になってしまいます。 同じ形式(YYYY/MM/DD hh:mm)のデータをphpMyAdminで インポートすると、自動的にssに00がつき、 YYYY-MM-DD hh:mm:ss(例 2009-10-20 12:10:00) となってくれます。 PHPでもphpMyAdminと同じ処理をしたいのですが、 インターネットで検索してもやり方が見つからず、 どのようにしたらよいのか、わかりません。。。 インサートするデータサイズが83MBと大きいので、 PHPで処理したいと思っています。 (phpMyAdminは8MBまでなので) ご存知の方がいましたら、教えていただけると、 助かります。m(_ _)m レンタルサーバー:さくら インサートするファイル:CSVファイル PHP 5.2.x MySQL 5.1 phpMyAdmin 3.1.3.1

    • ベストアンサー
    • MySQL
  • 日付をVARCHAR2型でYYYYMMDDと表示したい

    DATE型(YYYY/MM/DD HH24:MI:SS)の値を取り出し、 VARCHAR2(8)型の文字列YYYYMMDDにしたいと思っています。 TO_CHAR(DATE型,'YYYYMMDD')としても、YY-MM-DDと表示されてしまいます。 YYYYMMDDと文字型で表示させるにはどうすればよいのでしょうか。 宜しくお願い致します。

  • 数値から時間へ変換 分:秒形式

    2.485分と表示されるデータをhh:mm:ss形式に変換したくあれこれと考えております。ネットで検索すると「8.5時間を8:30に変換」というようにhh:mm形式での説明は多く見られるのですが、mm:ss形式ではヒントがよくわからずにおります。どういった数式で求められるのでしょうか?よろしくお願いします。

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

専門家に質問してみよう