2013-09-11 3 views
1

поэтому я в настоящее время используюПреобразование времени эпохи в мм-дд-гггг локальной дата

my $date = DateTime->now->mdy; 

, который дает мне формат «09-10-2013»

тогда я использовал

my $modTime = localtime((stat($some_file))[9]); 

, который дает мне дату в формате «вт 10 сентября 2013 15:29:29»

есть способ встроенный в Perl для форматирования $ MoDT ime в формате, как $ date? или мне нужно сделать это вручную?

спасибо!

+4

Вы можете использовать STRFTIME POSIX в '- печать STRFTIME "% m-% d-% Y", LocalTime ((стат $ some_file) [9]);' –

+1

@ Крис Charley , Это должен быть ответ! – ikegami

+3

'Time :: Piece' находится в основных модулях от Perl 5.10. 'use Time :: Piece; my $ modTime = localtime ((stat ($ some_file)) [9]) -> mdy; ' – ernix

ответ

3

Ну, в зависимости от того, что вы имеете в виду под «вручную», вы можете сделать это в несколько коротких шагов:

# demo. 
# Put the whole local time/stat/etc in parentheses where I put localtime. 
# 
($m,$d,$y) = (localtime)[4,3,5]; # extract date fields using a list slice 
$modtime = sprintf('%02d-%02d-%4d', $m+1, $d, $y+1900); # format the string 

Там, наверное, способ сделать это в одной строке, включая как извлечение и более сложную строку формата, но это приведет к ненужной запутыванию.

-Tom Williams

2

Создать объект DateTime с помощью from_epoch конструктора.

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use DateTime; 

# Using $0 (the current file) in these examples. 
my $epoch = (stat $0)[9]; 

my $dt = DateTime->from_epoch(epoch => $epoch); 

say $dt->dmy; 

Конечно, это можно переписать в виде одной строки:

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use DateTime; 

say DateTime->from_epoch(epoch => (stat $0)[9])->dmy; 

Но для чего-то это легко, я бы, вероятно, использовать Time :: Кусок (который является частью стандартного дистрибутива Perl), а не DateTime.

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use Time::Piece; 

say localtime((stat $0)[9])->dmy; 
1

Late ответить, уже видел хороший ответ на использование from_epoch (DateTime->from_epoch(epoch => $epoch);). Можно также использовать функцию POSIX в strftime как: print strftime "%m-%d-%Y", localtime((stat $some_file)[9]);

Смежные вопросы