我需要将Date::Manip ParseDateString()
的结果用作Date::ICal::Event
的基础
Date::ICal::Event
具有以下日期创建输入:
use Date::ICal;
$ical = Date::ICal->new( ical => '19971024T120000' );
$ical = Date::ICal->new( epoch => time );
$ical = Date::ICal->new( year => 1964,
month => 10, day => 16, hour => 16,
min => 12, sec => 47 );
Date::Manip ParseDateString()
返回标准日期值。
我应该如何在ICal日期中使用该日期?转换为epoch?它可以很容易地转换为ical格式吗?我觉得这应该比现在更容易。
我会这样做:
sub date2ical
{
my $date = shift;
Date::ICal->new( ical => UnixDate($date, '%QT%H%M%S'), # %Q means %Y%m%d
offset => UnixDate($date, '%z'));
} # end date2ical
# Usage:
my $ical = date2ical(ParseDateString('today'));
这应该可以正确处理时区(如果Date::Manip获得正确的时区)。
我做了一些进一步的CPAN搜索,并提出了模块DateTime::Format::DateManip
使用这个,我可以将其转换为DateTime表示,然后使用DateTime:
中的epoch方法从中获取epoch。my $cagedate = ParseDateString($cagewatch);
my $cagedatetime = DateTime::Format::DateManip->parse_datetime($cagedate);
$vevent->add_properties(
summary => $cagemovie,
description => $cagemovie,
dtstart => Date::ICal->new( epoch => $cagedatetime->epoch )->ical,
);
以防您对CAGE变量感到好奇。我在分析牢笼年的电影名单。整年都是尼克·凯奇。噢,是的。
如果您转储Date::Manip并切换到DateTime进行所有日期和时间处理,您的生活将会轻松得多。甚至还有一个DateTime::Format::ICal来帮助完成这个特定的任务。
似乎,如果您已经成功地将日期输入 date::Manip,您可以使用其printf指令以您想要的任何格式输出它。
看起来%Y%m%dT%H%M%S
是你想要的iCal。