Изменить формат отметки времени с помощью perl - PullRequest
1 голос
/ 03 мая 2020

У меня есть метки времени в моих данных. который выглядит так:

2020-04-10 14:11:18
2020-04-30 16:47:21

Это строка. Как я могу изменить их форматы, чтобы они выглядели так:

Apr 10 14:11:18
Apr 30 16:47:21

Какую библиотеку мне использовать? Может быть, DateTime?

Ответы [ 3 ]

3 голосов
/ 04 мая 2020

DateTime, безусловно, будет работать здесь, но Time :: Piece является частью стандартной библиотеки Perl с 2007 года. У нее есть метод strptime() ("время синтаксического анализа строки") для создания объектов. из строки и метода strftime() («время форматирования строки») для получения отформатированных строк даты из ваших объектов.

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';
use Time::Piece;

while (<DATA>) {
  chomp;
  my $date = Time::Piece->strptime($_, '%Y-%m-%d %H:%M:%S');

  say $date->strftime('%b %d %H:%M:%S');
}

__DATA__
2020-04-10 14:11:18
2020-04-30 16:47:21
3 голосов
/ 03 мая 2020

Не требуется модуль / библиотека, простой га sh с названиями месяцев может помочь в преобразовании даты в желаемый формат.

Разделение даты и времени с помощью split ' ', $timestamp

Разделите дату на компоненты с помощью split '-', $date

Получить название месяца от га sh с помощью $months{$month+0}

Сформируйте новую строку даты в нужном формате

use strict;
use warnings;
use feature 'say';


my $timestamp = '2020-04-10 14:11:18';

my $date = transform($timestamp);

say $date;


sub transform {
    my $timestamp = shift;

    my %months = ( 1 => 'Jan',  2 => 'Feb',  3 => 'Mar',  4 => 'Apr',
                   5 => 'May',  6 => 'Jun',  7 => 'Jul',  8 => 'Aug',
                   9 => 'Sep', 10 => 'Oct', 11 => 'Nov', 12 => 'Dec'
                );

    my($date,$time) = split ' ', $timestamp;
    my($year,$month,$day) = split '-', $date;

    return "$months{$month+0} $day $time";
}
0 голосов
/ 06 мая 2020

Выше оба решения хороши. Ниже приведен код, иллюстрирующий еще один простой способ форматирования даты.

DateTime :: Format :: Strptime - анализ и форматирование временных шаблонов strp и strf

% F: эквивалент% Y-% m-% d. (Это дата в стиле ISO)

% T: эквивалент% H:% M:% S.

% b или% B или% h: название месяца в соответствии с заданным локаль, сокращенно или полностью.

use DateTime::Format::Strptime;

my $current_date_format="%F %T";
my $new_date_format="%b %d %T";

my $date_time = "2020-04-10 14:11:18";

my $formatter = DateTime::Format::Strptime->new(pattern => "$current_date_format");
my $dt_obj    = $formatter->parse_datetime($date_time);
my $datetime  = $dt_obj->strftime($new_date_format);

print "\n New format Datetime: $datetime \n";

Вывод:

New format Datetime: Apr 10 14:11:18

Ссылка:

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