Как отформатировать дату в "2018-10-29 11:49:33" в Perl - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужно преобразовать дату по Гринвичу в дату, специфичную для региона, в формате, подобном «ГГГГ-ММ-ДД Ч: М: С». Разработанный код: -

use Time::Local;

($year,$mon,$day) = split /\-/, $ARGV[0];
($hrs,$min,$sec ) = split /:/, $ARGV[1];
$time = timegm( $sec, $min, $hrs, $day, $mon-1, $year-1900);
print scalar localtime($time), "\n";

Но когда я запускаю его как: -

$ perl testDateGMTToLocal.pl 2018-10-29 11:49:33

Он дает o / p, преобразованный в местном часовом поясе: -

Mon Oct 29 07:49:33 2018

Но я хочу это о / п в формате ниже

29-OCT-18 07:49:33

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете использовать

use POSIX qw( strftime );

print(strftime("%d-%b-%y %H:%M:%S", localtime($time)), "\n");
0 голосов
/ 13 декабря 2018

Я бы рекомендовал делать все это с помощью модулей.Полностью функциональным и очень полным модулем является DateTime , и для этой работы вам также потребуется DateTime :: Format :: Strptime .

Еще один вариант -более простой и гораздо меньший основной модуль Time :: Piece

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

use Time::Piece;

die "Usage $0 YYYY-MM-DD H:M:S" if @ARGV != 2;
my $time = join ' ', @ARGV;

my $tp = Time::Piece->strptime($time, "%Y-%m-%d %T");

my $local = localtime($tp->epoch);

say $local;

# In the desired format
say join('-', $local->mday, uc $local->month, $local->yy), ' ', $local->hms;

# If "Oct" is acceptable instead of block capitals for month abbreviation
say $local->strftime("%d-%b-%y %T");

Это преобразовывает время по Гринвичу с вызовом, как в вопросе, в местное время на моей машине

Mon Oct 29 04:09:33 2018
29-OCT-18 04:09:33
29-Oct-18 04:09:33

где запрашивается средний.

В некоторых системах есть спецификатор формата %F для %Y-%m-$d.Для 29-OCT-18 может существовать определенный формат, и в этом случае вам не нужно исправлять его вручную, но я не знаю об этом.

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