Как использовать Date :: Manip для создания даты, используемой Date :: ICal? - PullRequest
1 голос
/ 27 декабря 2011

Мне нужно взять результат 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?Преобразовать в эпоху?Может ли он быть легко преобразован в формат?Мне кажется, это должно быть проще, чем есть.

Ответы [ 4 ]

1 голос
/ 29 декабря 2011

Ваша жизнь станет намного проще, если вы сбросите Date :: Manip и переключитесь на DateTime для всей вашей обработки даты и времени. Существует даже DateTime :: Format :: ICal , чтобы помочь с этой конкретной задачей.

1 голос
/ 27 декабря 2011

Вот что я бы сделал:

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 получает правильный часовой пояс).

1 голос
/ 27 декабря 2011

Я провел дальнейшую охоту на CPAN и предложил модуль DateTime::Format::DateManip

. С его помощью я смог преобразовать его в представление DateTime, а затем получить эпоху из этого, используя метод эпохи, доступный в DateTime:

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.Я разбирал список фильмов для Year of the Cage .Всем Ника Кейджа, весь год.Ах да.

1 голос
/ 27 декабря 2011

Похоже, что если у вас есть дата в Date :: Manip, вы можете просто использовать ее директивы printf , чтобы вывести ее в любом формате.

Похоже, %Y%m%dT%H%M%S - это то, что вы хотите для iCal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...