- 締切済み
localtimeについて
perlを使っています。 localtime関数を使って時間をウェイブで表示しようと思っています。代替成功はしたのですが下記のことに問題があります。 2001年1月4日2時5分(現状) 2001年01月04日02時05分(要望) にしたいのですがどのようにすればできるのか教えていただけないでしょうか? 又、2001年01月04日02時05分をいちれつにつなげる事、つまり(2001010405)というように一列につなげることはできるのでしょうか? どうか教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- enzo_5150
- ベストアンサー率24% (8/33)
関数をうまく組み合わせれば1行でできちゃうんですね~すごい!(常識?) 関数をあまり知らないので、いつも変数を1つずつ処理してました。 勉強になります。 分割の方法なんですが、kokucho81さんの書かれてる通りですね。 「=~」はマッチ演算子で/^(....)(..)(..)(..)(..)$/というパターンで 左側の変数に代入します。 「.」(ドット)は「\n」(改行)以外の文字にマッチしますので、 意味合い的には最初の4文字を$year2に、次の2文字を$month2に・・・って 感じになります。(「^」が文字列の頭、「$」が文字列の末尾を指定しますので、 このパターンマッチは12文字の文字列にしかマッチしません) うまく説明できませんが、いけそうですか? kokucho81さん、間違ってましたらフォローお願いします(^^;
- kokucho81
- ベストアンサー率61% (157/255)
普通なら、以下のように処理します。 ########## 0を頭につけて2桁にする処理 ########## map { $_=sprintf("%02d",$_) } ($month,$day,$hour,$min); ########## 連結 ########## $xxxx=$year.$month.$day.$hour.$min; ########## 分解 ########## ($year2,$month2,$day2,$hour2,$min2)=$xxxx=~/^(....)(..)(..)(..)(..)$/;
- enzo_5150
- ベストアンサー率24% (8/33)
ごめんなさい、 $xxxx = $year.$month.$hour.$min; に $dayが抜けてました。 $xxxx = $year.$month.$day.$hour.$min; です。
- enzo_5150
- ベストアンサー率24% (8/33)
現状の「2001年1月4日2時5分」の変数部分が、 仮に$year、$month、$day、$hour、$minとしたら、 if($month < 10) { $month = "0".$month; } if($day < 10) { $day = "0".$day; } if($hour < 10) { $hour = "0".$hour; } if($min < 10) { $min = "0".$min; } などとしてやれば、要望通りになると思います。 また、一列につなぐのも、 $xxxx = $year.$month.$hour.$min; と連結してやればいいと思います。
お礼
す、すごいです。 いとも簡単にできてしました。 $xxxx = $year.$month.$day.$hour.$min; の中で $xxxxをまた年月日に分解することもできるのでしょうか?お願いします。