如何使用Date::Manip创建Date::ICal可用的日期?



我需要将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。

最新更新