Преобразуйте этот формат времени "2019-02-28T08: 42: 57 + 0000" в формат YYYY-MM-DD в perl - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу преобразовать приведенный ниже формат времени - "2019-02-28T08: 42: 57 + 0000" в формат ГГГГ-ММ-ДД в perl

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

В данном случае самое простое решение (как уже указывал simbabque) - просто обрабатывать дату как строку.Помимо решения substr(), которое вы получили, вы можете использовать регулярное выражение для удаления буквы "T" и всего, что за ним следует.

$date =~ s/T.*$//;

Если вы действительно хотите проанализировать и переформатировать дату,затем Time :: Piece был включен в стандартный дистрибутив Perl с 2007 года.

use Time::Piece;

$date = '2019-02-28T08:42:57+0000';
my $tp = Time::Piece->strptime($date, '%Y-%m-%dT%H:%M:%S%z');
say $tp->strftime('%Y-%m-%d');

Для более сложной обработки даты и времени (здесь не требуется, но я включаю ее дляполнота) вы должны прочитать для DateTime и его друзей.

use DateTime;
use DateTime::Format::Strptime;

my $parser = DateTime::Format::Strptime->new(
  pattern => '%Y-%m-%dT%H:%M:%S%z',
);

my $date = '2019-02-28T08:42:57+0000';

my $dt = $parser->parse_datetime($date);

say $dt->strftime('%Y/%m/%d');
0 голосов
/ 28 февраля 2019

С Дата :: Manip :

#!/usr/bin/perl
use warnings;
use strict;

use Date::Manip:.Date;

my $date = new Date::Manip::Date;
$date->parse("2019-02-28T08:42:57+0000")
    and die "parse" . $date->err() . "\n";

print $date->printf("%Y-%m-%d\n");

exit 0;

Тестовый прогон:

$ perl dummy.pl
2019-02-28

ПРИМЕЧАНИЕ: парсинг даты и временисложный предмет.Поэтому, пожалуйста,

  • выберите подходящий модуль вместо того, чтобы кодировать свой собственный синтаксический анализатор
  • do изучите документацию модуля, выбранного для задачи
0 голосов
/ 28 февраля 2019

Здесь вам не нужен модуль даты.Формат, который вы хотите, содержится внутри того, который у вас есть.A substr - это все, что вам нужно сделать.Дата ISO 8601 всегда имеет длину 10 символов, и вы начинаете с фронта.

print substr $date, 0, 10;
0 голосов
/ 28 февраля 2019

Пожалуйста, попробуйте это:

use Date::Parse qw(str2time);
use Date::Format qw(time2str);

my $string = '2019-02-28T08:42:57+0000';

my $time = str2time($string);
my $date = time2str("%Y-%m-%d %H:%M:%S", $time);

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