簡體   English   中英

如何修改Perl DateTime對象?

[英]How can I modify a Perl DateTime object?

在我的腳本中,我需要像這樣做一個循環:

use DateTime;
for $j(0..3){
    my ($date) = DateTime->now->ymd;
    my ($k) = 0;
    while($k <= $j){
        $date = ($date->subtract( days => 7));
        $k++;
    }
print "$date\n";
}

哪個應該得到當前日期,然后一個星期前,等等。可悲的是,在得到正確的當前日期后,它不起作用,我不知道什么是錯的。

Error message is "Can't call method "subtract" without a package or object reference [...]", 

但我不知道如何解決這個問題。

如果可能的話,我想繼續使用DateTime或將其替換為另一個模塊(可能不超過一個)。

Datetime->now->ymd是標量(字符串,它出現),而不是對象/引用。 你不能對它進行subtract ,因為它不存在。 您可能只想在分配給$date時嘗試省略ymd部分:

my ($date) = DateTime->now;
...

for(0..$j) {
    $date = ($date->subtract( days => 7));
}

...

如果要訪問ymd值,請在創建對象后執行以下操作:

my ($date) = DateTime->now;
...
my ($ymd) = $date->ymd;

有關詳細信息,請參閱CPAN頁面。

如果您嘗試在$date上使用Data :: Dumper ,您會立即看到問題所在: $date是一個字符串,而不是一個對象。 您應該延遲在其上調用ymd() ,直到需要對其進行字符串化。

use strict;
use warnings;

use DateTime;

for my $j (0..3)
{
    my $date = DateTime->now;
    $date = $date->subtract(days => 7) for (0 .. $j);
    print $date->ymd, "\n";
}

PS。 通過組合循環可以更簡化此代碼:

my $date = DateTime->now;
for my $weeks (0..4)
{
    print $date->ymd, "\n";
    $date = $date->subtract(days => 7);    
}

在計算和處理Date對象之后,最好在打印時執行ymd。

ymdsubtract時切換時看到差異:

#!/usr/bin/perl -w    

use strict;    
use Data::Dumper;
use DateTime;

   sub main{   
      my $date = DateTime->now->subtract(days=>7)->ymd;
      print "$date\n\n";
   }    

   main();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM