use Net::Google::Calendar;
my $cal = Net::Google::Calendar->new;
$cal->login(...);
my $c;
for ($cal->get_calendars) {
$c = $_ if ($_->title eq 'Custom');
}
$cal->set_calendar($c);
for my $event ($cal->get_events) {
print "<pre>" . $event->title . " ". Dumper($event->when) ." </pre>";
}
标题返回正常,但我也需要日期,希望按日期过滤掉我需要的事件(就像我对该帐户的日历一样,我认为这个模块不支持更高级的方式)。 如印刷结果所示,那里肯定有一些东西:
VAR1 = bless(
{
'local_rd_secs' => 0,
'local_rd_days' => 734733,
'rd_nanosecs' => 0,
'locale' => bless(
{
'default_time_format_length' => 'medium',
'native_territory' => 'United States',
'native_language' => 'English',
'native_complete_name' => 'English United States',
'en_language' => 'English',
'id' => 'en_US',
'default_date_format_length' => 'medium',
'en_complete_name' => 'English United States',
'en_territory' => 'United States'
},
'DateTime::Locale::en_US'
),
'local_c' => {
'hour' => 0,
'second' => 0,
'month' => 8,
'quarter' => 3,
'day_of_year' => 231,
'day_of_quarter' => 49,
'minute' => 0,
'day' => 18,
'day_of_week' => 6,
'year' => 2012
},
'utc_rd_secs' => 0,
'formatter' => undef,
'tz' => bless( { 'name' => 'UTC' }, 'DateTime::TimeZone::UTC' ),
'utc_year' => 2013,
'utc_rd_days' => 734733,
'offset_modifier' => 0
},
'DateTime'
);
'DateTime'是暗示性的,但是根据DateTime $event->when->day
给
Can't call method "day" without a package or object reference
我认为我使用Perl是愚蠢的。
如何使用返回的日期对象(或其他任何对象),以便我可以直接读取日期和/或使其可读?
答案 0 :(得分:4)
我从未使用该模块,但浏览其文档,我注意到
when [<start> <end> [allday]]
...
返回描述开始和结束的两个DateTime对象以及一个标志 注意这是否是一整天的活动。
所以,你可以试试( $event->when )[0]->day
。
答案 1 :(得分:2)
ref($event)
显示事件的包是Net::Google::Calendar::Entry
。它的文档显示了问题:
when [<start> <end> [allday]]
...
Returns two DateTime objects depicting the start and end and a flag
noting whether it's an all day event.
当您将其传递给Data::Dumper
时,DateTime
个对象将成为Dumper
个参数。 Dumper
的第二个参数通常是一个数组引用,用作输出中使用的变量名而不是$VAR1
等,但结束日期为undef
Data::Dumper
使用它的默认值。
当您尝试执行$event->when->day
时,情况会有所不同,显然,当您尝试在阵列上调用day
时。