سؤال

أود الحصول على تنسيق الطابع الزمني هذا:

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

حيث يكون دائمًا رقمين للرقم باستثناء العام ، حيث يبلغ 4 أرقام. ويستند إلى ساعة على مدار 24 ساعة.

كيف يمكنني فعل هذا في بيرل؟ أنا أفضل الوظائف الأصلية.

هل كانت مفيدة؟

المحلول

Posix يوفر strftime:

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

قد تميل إلى كتابة شيء مثل:

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

كوسيلة لتجنب Posix. لا! بقدر ما أعلم، POSIX.pm كان في جوهر منذ 1996 أو 1997.

نصائح أخرى

جرب ال صيغة التاريخ تنسيق الروتين الفرعي من CPAN.

هذه روتين فرعي أستخدمه. يتيح لك الحصول على طابع وقت التاريخ في أي تنسيق تفضله.

#! /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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top