Perl - Ngày và giờ

Chương này sẽ cung cấp cho bạn những hiểu biết cơ bản về cách xử lý và thao tác ngày và giờ trong Perl.

Ngày và giờ hiện tại

Hãy bắt đầu với localtime(), trả về giá trị cho ngày và giờ hiện tại nếu không có đối số. Sau đây là danh sách 9 phần tử được trả về bởilocaltime khi sử dụng trong ngữ cảnh danh sách -

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Hãy thử ví dụ sau để in các phần tử khác nhau được trả về bởi hàm localtime () -

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

16 Feb Sat

Nếu bạn sẽ sử dụng hàm localtime () trong ngữ cảnh vô hướng, thì nó sẽ trả về ngày và giờ từ múi giờ hiện tại được đặt trong hệ thống. Hãy thử ví dụ sau để in ngày và giờ hiện tại ở định dạng đầy đủ -

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Local date and time Sat Feb 16 06:50:45 2013

Giờ GMT

Chức năng gmtime()hoạt động giống như hàm localtime () nhưng các giá trị trả về được bản địa hóa cho múi giờ tiêu chuẩn của Greenwich. Khi được gọi trong ngữ cảnh danh sách, $ isdst, giá trị cuối cùng do gmtime trả về, luôn là 0. Không có Giờ tiết kiệm ánh sáng ban ngày theo GMT.

Bạn nên lưu ý thực tế là localtime () sẽ trả về giờ địa phương hiện tại trên máy chạy script và gmtime () sẽ trả về Giờ trung bình của Greenwich, hoặc GMT (hoặc UTC).

Hãy thử ví dụ sau để in ngày và giờ hiện tại nhưng theo thang GMT -

#!/usr/local/bin/perl

$datestring = gmtime();
print "GMT date and time $datestring\n";

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

GMT date and time Sat Feb 16 13:50:45 2013

Định dạng ngày và giờ

Bạn có thể sử dụng hàm localtime () để nhận danh sách gồm 9 phần tử và sau đó, bạn có thể sử dụng printf() chức năng định dạng ngày và giờ dựa trên yêu cầu của bạn như sau:

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Time Format - HH:MM:SS
06:58:52

Thời gian kỷ nguyên

Bạn có thể sử dụng hàm time () để lấy thời gian epoch, tức là số giây đã trôi qua kể từ một ngày nhất định, trong Unix là ngày 1 tháng 1 năm 1970.

#!/usr/local/bin/perl
 
$epoc = time();

print "Number of seconds since Jan 1, 1970 - $epoc\n";

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Number of seconds since Jan 1, 1970 - 1361022130

Bạn có thể chuyển đổi một số giây nhất định thành chuỗi ngày và giờ như sau:

#!/usr/local/bin/perl

$datestring = localtime();
print "Current date and time $datestring\n";

$epoc = time();
$epoc = $epoc - 24 * 60 * 60;   # one day before of current date.

$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

Hàm POSIX strftime ()

Bạn có thể sử dụng chức năng POSIX strftime()để định dạng ngày và giờ với sự trợ giúp của bảng sau. Xin lưu ý rằng các thông số được đánh dấu bằng dấu hoa thị (*) phụ thuộc vào ngôn ngữ.

Bộ định danh Được thay thế bởi Thí dụ
%a Tên ngày trong tuần viết tắt * Thu
%A Tên đầy đủ các ngày trong tuần * Thursday
%b Tên tháng viết tắt * Aug
%B Tên tháng đầy đủ * August
%c Biểu diễn ngày và giờ * Thu Aug 23 14:55:02 2001
%C Năm chia cho 100 và cắt ngắn thành số nguyên ( 00-99) 20
%d Ngày trong tháng, zero-padded ( 01-31) 23
%D MM/DD/YYNgày ngắn hạn , tương đương với%m/%d/%y 08/23/01
%e Ngày trong tháng, dấu cách ( 1-31) 23
%F YYYY-MM-DDNgày ngắn hạn , tương đương với%Y-%m-%d 2001-08-23
%g Năm dựa trên tuần, hai chữ số cuối cùng ( 00-99) 01
%G Năm dựa trên tuần 2001
%h Tên tháng viết tắt * (giống như %b) Aug
%H Giờ ở định dạng 24h ( 00-23) 14
%I Giờ ở định dạng 12h ( 01-12) 02
%j Ngày trong năm ( 001-366) 235
%m Tháng dưới dạng số thập phân ( 01-12) 08
%M Phút ( 00-59) 55
%n Ký tự dòng mới ( '\n')
%p Chỉ định AM hoặc PM PM
%r Đồng hồ 12 giờ * 02:55:02 pm
%R HH:MMThời gian 24 giờ , tương đương với%H:%M 14:55
%S Thứ hai ( 00-61) 02
%t Ký tự tab ngang ( '\t')
%T Định dạng thời gian ISO 8601 ( HH:MM:SS), tương đương với%H:%M:%S 14:55
%u ISO 8601 ngày trong tuần là số với thứ Hai là 1( 1-7) 4
%U Số tuần với Chủ nhật đầu tiên là ngày đầu tiên của tuần một ( 00-53) 33
%V ISO 8601 số tuần ( 00-53) 34
%w Ngày trong tuần dưới dạng số thập phân với Chủ nhật là 0( 0-6) 4
%W Số tuần với thứ Hai đầu tiên là ngày đầu tiên của tuần một ( 00-53) 34
%x Biểu diễn ngày * 08/23/01
%X Biểu diễn thời gian * 14:55:02
%y Năm, hai chữ số cuối cùng ( 00-99) 01
%Y Năm 2001
%z

Độ lệch ISO 8601 từ UTC trong múi giờ (1 phút = 1, 1 giờ = 100)

Nếu không thể xác định múi giờ, không có ký tự nào

+100
%Z

Tên hoặc chữ viết tắt của múi giờ *

Nếu không thể xác định múi giờ, không có ký tự nào

CDT
%% Một %dấu hiệu %

Hãy xem ví dụ sau để hiểu cách sử dụng -

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013