2010-01-27 28 views
15

Tôi muốn để có được timestamps này định dạng:Làm cách nào để định dạng dấu thời gian trong Perl?

01/13/2010 20:42:03 - - 

đâu nó luôn luôn 2 chữ số cho số trừ cho năm, nơi đó là 4 chữ số. Và nó dựa trên một chiếc đồng hồ 24 giờ.

Làm cách nào tôi có thể thực hiện việc này trong Perl? Tôi thích các hàm gốc hơn.

+1

Mặc dù tôi hiểu tùy chọn của bạn cho mô đun gốc/lõi, DateTime và một vài trình định dạng liên quan hoàn toàn đáng để bạn tham gia vào bộ công cụ của mình. http://search.cpan.org/dist/DateTime/ – daotoad

Trả lời

35

POSIX cung cấp strftime:

 
$ perl -MPOSIX -we 'print POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)' 
01/27/2010 14:02:34 

Bạn có thể bị cám dỗ để viết một cái gì đó như:

my ($sec, $min, $hr, $day, $mon, $year) = localtime; 
printf("%02d/%02d/%04d %02d:%02d:%02d\n", 
     $day, $mon + 1, 1900 + $year, $hr, $min, $sec); 

như một phương tiện tránh POSIX. Đừng! AFAIK, POSIX.pm đã được trong lõi từ năm 1996 hoặc 1997.

+1

Đánh giá từ "01/13/2010' rõ ràng trong câu hỏi, Brian có vẻ muốn có định dạng' "% m /% d/...' hoặc thậm chí '"% D% T "'. –

+0

@gbacon '% D% T' không hoạt động trên' perl' 5.10.1 trên Windows (trên Linux), tôi quyết định chơi an toàn. hoán đổi '% m' và'% d'. –

+0

Argh! Bắt tốt, và tốt để ghi nhớ –

0

Đây là một chương trình con mà tôi sử dụng. Nó cho phép bạn có được dấu thời gian trong bất kỳ định dạng nào bạn thích.

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

use POSIX; 
use POSIX qw(strftime); 

sub getTime 
{ 
    my $format = $_[0] || '%Y%m%d %I:%M:%S %p'; #default format: 20160801 10:48:03 AM 
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); 
    return strftime($format, $sec, $min, $hour, $wday, $mon, $year, $mday); 
} 

# Usage examples 
print getTime()."\n";     #20160801 10:48:03 AM 
print getTime('%I:%M:%S %p')."\n";  #10:48:03 AM 
print getTime('%A, %B %d, %Y')."\n";  #Monday, August 01, 2016 
print getTime('%Y%m%d %H:%M:%S')."\n"; #20160801 10:48:03 
Các vấn đề liên quan