369290 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Calendar

Favorite Blog

Gamer’s Diary 雪月花1983さん
Dが足りない まきの♪さん

Comments

 S T@ Re[1]:PCの調子がやっぱり悪くなった。(05/23) お久ですよー(っ・ヮ・)つ 実は未だに時々…
 dmiyakawa@ Re:PCの調子がやっぱり悪くなった。(05/23) PCの調子のことよりもブログが更新された…
 s_fox@ Re[2]: use DateTimeとuse bigint (08/13) 亀レスですが、 use/noは(モジュールがま…
 S T@ Re[1]: use DateTimeとuse bigint (08/13) それがですねぇ。 何故かno bigint;しても…
 s_fox@ Re: use DateTimeとuse bigint (08/13) DateTimeが絡むところだけ{}で囲って no b…
2014.08.13
XML
カテゴリ:プログラミング
Perlのお話。
入力値が馬鹿でかい整数値なので
use bigint;を使用していたのだけれど
日付の計算にDateTimeモジュールを使用していた。

そうすると
$dt = DateTime->now(time_zone => 'local');
$dt->add(months => 1);
でエラーが出る。

monthsにaddする1がBigint型だとか抜かしやがる。

add命令使えないのかなぁとか思って
$year = $dt->year;
$month = $dt->month;
$day = $dt->day;
$month = $month + 1;
$dt_new = DateTime->new(year => $year , month => $month, day => $day, time_zone => 'local');
ってするとmonthに代入する値がBigint型だと抜かしやがる
(year, dayは問題なし)

どうもuse bigint;すると1などのリテラルがbigint型と解釈されるので
四則演算の結果もbigint型と解釈されるっぽい。

どうすればいいんじゃーヽ(`Д´)ノと暴れること4時間ほど。
以下のようにすると上手くいった。
$dt = DateTime->now(time_zone => 'local');
$addvalue = sprintf("%d", 1);
$dt->add(months => $addvalue);





お気に入りの記事を「いいね!」で応援しよう

Last updated  2014.08.14 00:53:49
コメント(3) | コメントを書く
[プログラミング] カテゴリの最新記事


■コメント

お名前
タイトル
メッセージ
画像認証
別の画像を表示
上の画像で表示されている数字を入力して下さい。


利用規約に同意してコメントを
※コメントに関するよくある質問は、こちらをご確認ください。


 Re: use DateTimeとuse bigint (08/13)   s_fox さん
DateTimeが絡むところだけ{}で囲って no bigint; しておけばええんちゃう? (2014.08.14 09:41:59)

 Re[1]: use DateTimeとuse bigint (08/13)   S T さん
それがですねぇ。
何故かno bigint;してもエラーが出るんですよ……
以下で試したんだけどね。

no bigint;
$dt = DateTime->now(time_zone => 'local');
$dt->add(months => 1);

#ところで "no"ってスコープ内でだけ有効なの? (2014.08.15 16:48:12)

 Re[2]: use DateTimeとuse bigint (08/13)   s_fox さん
亀レスですが、
use/noは(モジュールがまともに実装されてれば)スコープ内でのみ有効です。
perldoc bigintにもno bigintを使う例がありました。
ためしにこちらでもやってみましたが、no bigintしたスコープ内では普通にDateTime::addが動きました。(v5.10.1 @CentOS6) (2014.08.22 14:13:17)


© Rakuten Group, Inc.