• ベストアンサー

サマータイムの判定について

perlでサマータイムの判定はどのように行うのでしょうか? スクリプト実行時に、米国、英国、豪州、ニュージーランドがそれぞれサマータイム時かどうかを判定したいと考えております。 どのようなスクリプトがよいでしょうか? 時間単位の正確さは求めておりません。 WEBサーバーは日本で借りていています。 参考サイト http://webexhibits.org/daylightsaving/g.html

  • Perl
  • 回答数4
  • ありがとう数31

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1>サマータイムの値が取れない その後追試してみましたが、 #2で仰るように、gmtime, localtime は、マシンに設定されている状況に依存するようです。(日本では夏時間が設定されていないので、常に0) 標準時で取れるもんだと思い込んでいました、すみません。 モジュールを探してみましたが適当なモノが見つかりませんでしたけれども、 質問者の参考サイトにサマータイムの期間の一覧があるので、それを使ってゴリゴリとやればいいですね。 そこで CPANモジュールの Date::Manip を使って書いてみました。 ---------------------------------------------------------------- #http://webexhibits.org/daylightsaving/g.html use Date::Manip; Date_Init("TZ=JST"); $today = ParseDate("today"); print UnixDate($today,"%Y/%m/%d %H:%M:%S %Z\n");#現在日本時間 $USA = Date_ConvTZ($today,"JST","CST");#Central Standard:アメリカ中部標準時間 print UnixDate($USA,"%Y/%m/%d %H:%M:%S at USA\n"); $year = UnixDate($USA,"%Y"); #※2007年以降3月の2番目の日曜日に始まって、11月の最初の日曜日に終わる、と改正 $start = ParseDate("2:00am 1st sunday in April $year"); $end = ParseDate("2:00am last sunday in October $year"); if(Date_Cmp($start,$USA)<=0 && Date_Cmp($USA,$end)<0){ print "USA is Daylight Saving Time!\n"; } $ENG = Date_ConvTZ($today,"JST","WET");#Western European:西ヨーロッパ時間 print UnixDate($ENG,"%Y/%m/%d %H:%M:%S at UK\n"); $year = UnixDate($ENG,"%Y"); $start = ParseDate("1:00am last sunday in March $year"); $end = ParseDate("1:00am last sunday in October $year"); if(Date_Cmp($start,$ENG)<=0 && Date_Cmp($ENG,$end)<0){ print "UK is Daylight Saving Time!\n"; } $AUS = Date_ConvTZ($today,"JST","CAST");#Central Australian Standard:オーストラリア中部標準時間 print UnixDate($AUS,"%Y/%m/%d %H:%M:%S at AUS\n"); $year = UnixDate($AUS,"%Y"); $start = ParseDate("last sunday in October $year"); $end = ParseDate("last sunday in March $year"); if(Date_Cmp($start,$AUS)<=0 && Date_Cmp($AUS,$end)<0){ print "Australia is Daylight Saving Time!\n"; } $NZ = Date_ConvTZ($today,"JST","NZST");#New Zealand Standard print UnixDate($NZ,"%Y/%m/%d %H:%M:%S at NZ\n"); $year = UnixDate($NZ,"%Y"); $start = ParseDate("1st sunday in October $year"); $end = ParseDate("3rd sunday in March $year"); if(Date_Cmp($start,$NZ)<=0 && Date_Cmp($NZ,$end)<0){ print "New Zealand is Daylight Saving Time!\n"; }

ko_ton
質問者

お礼

Date::Manipはインストール済みでしたのでスームーズにうまく動作しました。 以前の第2水曜日の件に続いてホントにありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3のオーストリアとニュージーランドですが、 終了日の年が翌年なので、間違ってますね。 $start= の後 $year++; とでもして置いて下さい。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

gmtimeやlocaltimeの夏時間はサーバに設定されているロケールに依存すると思います。 (サーバが日本にあるなら大抵はロケールも日本) 他国の夏時間かどうかを調べるにはTime::Timezoneモジュールで調べられそうです。 http://search.cpan.org/~muir/Time-modules-2003.0211/lib/Time/Timezone.pm

ko_ton
質問者

補足

回答ありがとうございます。 Timezone.pmをCPANからインストールすることができました。(ローカルのアクティブパールには、うまくインストールできませんでした。そんなレベルの人です。) ただ私には利用方法が理解できませんでした。orz 日本語のドキュメントを探したのですが、うまく見つけられませんでした。 なにかわかりやすいサイトはないでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

gmtime (グリニッジ標準時) の返値 (秒,分,時,日,月,年,曜日,年の通算日,夏時間) で夏時間の部分が真なら夏時間 勘違いコメントだったらすみません

ko_ton
質問者

補足

回答ありがとうございます。 意図はあっているのですが、うまくサマータイムの値が取れないので困ってます。 $isdst = (gmtime(time))[8]; print $isdst; とか $isdst = (gmtime(time -60*60*5))[8]; print $isdst; というようにしても、$isdstは必ず「0」を返してくるのです。 なにかやり方が悪いんでしょうか?

関連するQ&A

  • サマータイムとPCの時刻合わせについて

    海外在住です。 24日のお昼すぎぐらいに、ふとPCの時刻を見ると1時間進んでいます。 PCの時刻あわせの設定はデフォルトのタイムサーバに自動的に更新のままで、 とりあえず手動で問い合わせをしてみても、ずれた応答のままでしたので、 タイムサーバがおかしいかと思い、手動で時刻を合わせて自動時刻あわせをOFFに しておきました。 今日になっても直っていなかったので、さすがにデフォルトのtime.nist.govが ずれるのはヘンだと思い、調べてみたらどうも夏時間になっているようです。 PCの時刻設定で「自動的に夏時間の調整をする」のチェックをはずすと正常になります。 疑問なのは、なぜ急に24日にこのようなことが起こったのかということです。 また、PCの「自動的に夏時間の調整をする」のチェックを入れた時の動作について ご存知でしたら教えてください。 想像では、選択したタイムゾーンによってずれる日にちが決まっているとかなのかと 思っています。 だとしたら、その対応表(どのタイムゾーンがいつサマータイムを実施するか)は WindowsPC内にもってるんでしょうか? 私のPCでは「(GMT+12:00)フィジー」ですが、フィジーはサマータイムは導入していません。 近隣にもサマータイムを導入してそうな国はなさそうです。 どちらにしても、この2月の時期にサマータイムが始まる(なぜなら1時間進んだので) 地域はないと思います。ブラジルではサマータイムが終了したみたいです。 オフィス内の他のPCも全部ずれたので、間違えて1時間早くお昼ごはんを食べに行ったり する人もいるなどおかしなことになってます。 文章がどうもまとまりに欠けて申し訳ないですが、これらのことについてご存知であれば 教えてください。

  • サマータイムの設定要領は?

    国会では再びサマータイムの導入論が盛り上がっているようですが、 具体的な設定方法が判りません。ご存知の方、ご教示下さい。 例えば、3月の最終日曜日に1時間進めるとは、 土曜日の23時59分59秒の次に日曜日の1時00分00秒とするのか 日曜日の00時00分00秒の次に日曜日の1時00分01秒とするのか 日曜日の22時59分59秒の次に月曜日の0時00分00秒とするのか などなど... また、10月に戻すときは? 時刻認証などコンピュータシステムへの影響を調査するために、より正確 な方法を理解しておきたいと思うのです。

  • 現在あるサーバー(Aサーバー)のcronで次のようなコマンドでperl

    現在あるサーバー(Aサーバー)のcronで次のようなコマンドでperlのスクリプトを動かしています。 cd /home/saarisa/www/; ./tools/runtask これを他のサーバー(Bサーバー)から動かしたいと思い下記のようなSHELLスクリプトをAサーバーに作ってそれを実行したいのですがこのSHELLスクリプトの実行方法がわかりません どうしたら実行できるのでしょうか? #!/bin/sh cd /home/saarisa/www/mt/; ./tools/run-periodic-tasks 1.BサーバーのCRONから実行 2.BサーバーのPHPから実行 3.HTMLからクリックして実行 4.BサーバーからAサーバーのPERLを直接実行 どの方法でもかまいません。 (AサーバーはPHPは動かず、Bサーバーはphpが動きます。) よろしくお願いします。

  • 新TOEICニュージーランド英語の特徴

    今日TOEICを受けてきました。 新TOEICでは米国、英国、カナダ、豪州・NZのアクセントが各25%の割合でリスニング問題が出題されるそうですが、 ブリティッシュイングリッシュ、オージーイングリッシュのアメリカ英語との違いははっきりわかるものの NZ英語の特徴がいまいちわかりません。 (なおTOEICでは豪州・NZがいっしょくたにされてますが、 私は、昔ニュージーランドに1週間くらい旅行したとき、NZ英語のアクセントはオージーイングリッシュよりオージーイングリッシュに近いように感じました。) NZ英語は他の国の英語とここが違う!というポイントをご存知の方、教えて下さい。 宜しくお願い致します。

  • 頭にperlとつけないと実行できない

    solaris8・perl5.6.1において、作成したperlのスクリプトを実行する時に、 頭にperlをつけて $ perl ファイル名 としないとスクリプトが実行できません。 実行ユーザーにパスはとおっています。 普通に $ ファイル名 で実行するにはどうしたら良いかアドバイス頂けないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • if等判定文での定数、変数の記述順序

    perlスクリプトなどで、判定文を記述する際の考え方について、 重箱の隅的な質問になりますが、よろしくお願いします。 (1)if等判定文での定数、変数の記述順序 例えば、ある変数が0であることを判定するのに、結果は同じなのですが、 [] if($a == 0) [] if(0 == $a) のどちらで書く方が良い(理にかなっている)のでしょうか? (文字列でも同じでしょうか) [] if("$a" eq "") [] if("" eq "$a") (2)私はよく上限、下限の判定を行う際に、 [] 0 < x < 10 ということを表現する際に、 数学的に見映え(並び順)が同じになるよう、 [] if((0 < $x) && ($x < 10)){ と書くのですが、(1)のことと照らし合わせると、 [] if(($x > 0) && ($x < 10)){ と書いたり、 [] if((0 < $x) && (10 > $x)){ と書くほうが良いでしょうか。 (3)以上の(1)(2)のことは、標準的なC言語でも同じでしょうか? (4)Perl独特の書き方ですが、1行で済む実行文の場合、 [] 実行文 if(条件文); と書く方が、 [] if(条件文) 実行文; と書くよりも変換効率(?)か何かが良いと聞いたのですが、 どういう理由でどちらが良いとかありますか? この辺の違いはコンパイラが吸収してくれるので、どちらでも良いとか、 何か参考になる文献などもありましたら、ご教示よろしくお願いします。

    • ベストアンサー
    • Perl
  • IISでCGIとしてのPerlが動かない

    Win2K ProにてIISでローカルサーバーでサーバーサイドスクリプトの勉強中です。 ASPは標準でついているので、PerlとPHPを組み込みました。 PHPは内部プロセス型ではなく、CGIバージョンですが、正常動作しました。 もちろんASPも。 それで問題なのですが、Perlがどうしても動きません。 PHPと同じように実行ファイルのパスや拡張子の設定はできているはずです。 しかし、いつまでたっても出力が出ず、2分くらいたってCGIタイムアウトとなってしまいます。 PerlにはActive PerlとCygwin付属のPerl両方試しましたが、タイムアウトです。 ファイルをコンソール上で実行してみましたが、Active PerlもCygwinのPerlも、期待通りの出力がなされています。 ちなみに、shファイルをCygwinのbashに関連付けて、実行させましたが、コンソール上での出力とはうらはらに、ブラウザ上ではやはりタイムアウトとなりました。 PerlのソースはいずれもほかのところのApacheでは動いているものです。 httpヘッダも正常です。 ソースの文字コードは英語のみ、EUC、改行コードcr+lf、lfのみなど、いろいろ試しましたがダメでした。 なにが原因なのでしょう。 IISを使っている方、アドバイスお願いします。

  • さくらインターネットのレンタルサーバーのOSはFreeBSDですが、

    さくらインターネットのレンタルサーバーのOSはFreeBSDですが、 たとえば、自サイトのCGIの負荷が高くなるとホームページが開かなくなります。 個人のページなので、強制的にプロセスを削除するスクリプトをperlやシェルスクリプトで書きたいのですが、どのように書けばよいでしょうか? topとすると、 PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 23981 test 1 4 0 16180K 13144K select 0 0:00 0.00% perl5.8. これをスクリプトで削除する方法です。 人間が見ればCOMMANDがperl5.8.となっているので、これがcgiでPIDは23981なので kill -9 23981とすればよいのはわかりますが、 スクリプトで実行する方法が知りたいです。

  • Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

    現在Perlスクリプトを作成し サーバにアップしました。 SSHでサーバにログインし #perl a.cgi と実行したところ(CGIとして動作させるため。中身はPerlスクリプト) Content-type: text/html <html> <body> あああああ </body> </html> のようなメッセージが表示され正常に動作しているとおもいます。 しかし、 http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると 500 Internal Server Error になります。 パーミッションは755で正常 Perlのパスは#!/usr/bin/perlとしており、これも正常です。 文字コードはeuc-jp 改行コードLF サーバはApache/1.3.33 Perlバージョンは5.8.4 自分のパソコン上でperl+HTTPサーバ(httpd)を使うと HTMLふぁいるとして出力されます。 サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

    • ベストアンサー
    • Perl
  • オージー英語は綴りや文法は英国英語と全く一緒?

    (1)オージー英語は綴りや文法は英国英語と全く一緒ですか? つまり、文章を綴る時の文法は、英国英語と完全に共通で、 唯一、発音だけがオーストラリア訛りになっているだけで、 (2)例えば、生粋の英国人が身代を築いてアラフォー、アラフィフ、 アラ還とかで、豪州に移住してきても、生粋の豪州人との メールの送受信上も、口頭コミュニケーション上も全く困らない のでしょうか? (3)それとも、英国人ですら、豪州人に豪州訛りの英語で話されても、 何を言われているかいまいち良く聞き取れず、逆に、豪州人は、 英国人が綺麗な標準英語で話すのを聞いても、完全に理解できる という事なのでしょうか? (4)また、ちょっと英語が好き程度、英検2級程度の、生粋の日本人が、 豪州の永住ビザを取得し、終の棲家とする事を目標に、豪州に 移住したら、オージーイングリッシュを完全に聞き取れるように なるまで、やっぱり、みな、かなり苦労しはる感じでしょうか? (5)オージーイングリッシュは、英国標準英語より遥かに聞き取り 難いのでしょうか? (6)ポケトークその他の通訳機械も、ひょっとして、全く使いものに なりませんか? ※検索結果 119 のうち 1-24件 文房具・オフィス用品 : "ポケトーク" https://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Doffice-products&field-keywords=%E3%83%9D%E3%82%B1%E3%83%88%E3%83%BC%E3%82%AF (7)豪州永住ビザ取得にアイエルツ受験と高成績は、必須条件ですか? ☆IELTS(アイエルツ) https://ja.m.wikipedia.org/wiki/IELTS 以上、宜しくお願いします。

専門家に質問してみよう