Lệnh xem giờ trong linux

Lệnh xem giờ trong linux

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng lệnh date để làm việc với ngày giờ trong Bash shell.

Ngày giờ trong Bash shell có thể được in với nhiều định dạng khác nhau.  Trong các hệ thống Unix, ngày tháng được lưu trữ dưới dạng số nguyên, có giá trị chính là số giây được tính từ thời điểm 01/01/1970 00:00:00 UTC đến thời điểm hiện nay.

Tại sao lại có thời điểm 01/01/1970, là do hệ thống Unix, tiền thân của các hệ thống Linux sau này, được chính thức đưa vào hoạt động từ thời điểm 0 giờ ngày 01/01/1970, do đó thời điểm này được xem là thời điểm ra đời của các hệ thống Linux. Do đó thời gian trong các hệ thống Linux được tính bắt đầu từ mốc thời gian trên. Giá trị này được gọi là epoch time hoặc Unix time.

Trong Linux, để lấy được giá trị ngày tháng dưới dạng số nguyên đã nói ở trên, ta dùng lệnh sau:

$ date +%s
1407420763

Chúng ta cùng thử kiểm tra xem con số này có chính xác không nhé.

Tại thời điểm tôi nhập lệnh trên, thời gian của hệ thống là 21:24:02 07/08/2014 (GMT+7)

Như chúng ta biết thì :

  • 1 năm = 365 ngày và 6 giờ = 365,25 ngày
  • 1 ngày = 24 giờ
  • 1 giờ = 3600 giây

=> Vậy 1 năm = 365,25 x 24 x 3600 = 31.557.600 giây

Lấy số trên chia cho giá trị ta vừa tính được (làm tròn lấy 4 chữ số thập phân):

1407420763 / 31.557.600 = 44.5985 (năm)

=> 44 năm 218 ngày 14 giờ 24 phút

=> Tính từ mốc 00:00:00 01/01/1970 thì giá trị trên cho ta được kết quả 14:24:00 07/08/2014 UTC

Giá trị trên là giờ quốc tế (UTC/GMT), do Việt Nam nằm ở múi giờ GMT + 7, nên ta lấy thời gian trên cộng thêm 7 giờ sẽ ra thời gian thực tế tại Việt Nam là 21:24:00 07/08/2014 => trùng khớp với thời gian ở trên.

  • Lưu ý trong quá trình tính toán, do chúng ta làm tròn các chữ số thập phân nên thời gian chúng ta tính ra lệch với thời gian thực tế vài giây.

1. In ra ngày tháng hiện tại

$ date
Thu Aug 7 10:30:48 EDT 2014

2. Lấy giá trị Unix time từ thời điểm bất kỳ

Ở trên chúng ta đã lấy được giá trị Unix time (số giây tính từ thời điểm 00:00:00 01/01/1970) bằng lệnh:

$ date +%s

Chúng ta có thể lấy ra số giây tính từ 1 thời điểm bất kỳ đến hiện tại bằng lệnh:

$ date --date "Thu Nov 18 08:07:21 IST 2010" +%s
1290047841

Tùy chọn –date ở trên được dùng để cung cấp 1 chuỗi ngày tháng đầu vào.

3. Các tùy chọn định dạng ngày tháng

Các tùy chọn định dạng ngày tháng khác nhau được dùng để in ngày tháng ra những định dạng khác nhau tùy vào những mục đích khác nhau.

Ở trên chúng ta đã làm quen với 1 tùy chọn là +%s, có tác dụng in ra ngày tháng dưới dạng tem thời gian (Unix time). Ngoài ra còn có các tùy chọn như:

  • %a => In ra tên ngắn gọn của ngày trong tuần
$ date +%a
Thu
  • %A => In ra tên đầy đủ của ngày trong tuần
$ date +%A
Thursday
  • %b, %h => In ra tên ngắn gọn của tháng
$ date +%b
Aug
  • %B => In ra tên đầy đủ của tháng
$ date +%B
August
  • %c => In ra ngày tháng và thời gian
$ date +%c
Thu 07 Aug 2014 11:00:43 AM EDT
  • %C => giống với tùy chọn %Y, in ra số năm, nhưng chỉ lấy 2 số đầu
$ date +%C
20
  • %d => In ra ngày của tháng
$ date +%d
07
  • %D => In ra ngày tháng đầy đủ, dưới dạng mm/dd/yy
$ date +%D
08/07/14
  • %e => In ra ngày của tháng, nhưng ở dạng ngắn gọn, giống với tùy chọn %_d
$ date +%e
7
  • %F => In ra ngày tháng đầy đủ
$ date +%F
2014-08-07
  • %g => In ra 2 số cuối của năm
$ date +%g
14
  • %G => In ra giá trị của năm
$ date +%G
2014
  • %H, %k  => In ra số giờ (dạng 24 giờ)
$ date +%H
22
  • %I , %l=> In ra số giờ (dạng 12 giờ)
$ date +%I
10
  • %j => In ra ngày của năm
$ date +%j
219
  • %m => In ra tháng
$ date +%m
08
  • %M => In ra phút
$ date +%M
13
  • %n => Thêm dòng mới
  • %N => In ra nano giây

1 giây = 1000 mili giây

1 mili giây = 1000 micro giây

1 micro giây = 1000 nano giây

$ date +%N
783255430
  • %p => In ra giá trị AM hoặc PM tương ứng
$ date +%p
PM
  • %P => giống với %p, nhưng in ra ở dạng chữ thường
$ date +%P
pm
  • %r => In ra thời gian ở dạng 12 giờ
$ date +%r
10:19:07 PM
  • %R => In ra giờ và phút ở dạng 24 giờ
$ date +%R
22:19
  • %s => In ra số giây tính từ 00:00:00 01/01/1970 UTC (chúng ta đã tìm hiểu ở phần đầu)
  • %S => In ra số giây
$ date +%S
41
  • %t => Thêm 1 tab
  • %T => In ra thời gian, tương tự %H:%M:%S
$ date +%T
11:23:03
  • %u => In ra ngày của tuần (Thứ 2 được tính là ngày 1)
$ date +%u
4
  • %U => In ra số tuần  (với Chủ nhật được tính là ngày đầu tuần)
$ date +%U
31
  • %V => In ra số tuần theo chuẩn ISO (với Thứ 2 được tính là ngày đầu tuần)
$ date +%V
32
  • %w => In ra ngày của tuần (0 đến 6), trong đó 0 là ngày chủ nhật
$ date +%w
4
  • %W => In ra số tuần (với Thứ 2 được tính là ngày đầu tuần)
$ date +%W
31
  • %x => In ra ngày tháng của địa phương
$ date +%x
08/07/2014
  • %X => In ra thời gian của địa phương
$ date +%X
10:30:28 PM
  • %y => In ra 2 ký tự cuối của năm
$ date +%y
14
  • %Y => In ra  giá trị của năm
$ date +%Y
2014
  • %z => In ra múi giờ dưới dạng số +hhmm
$ date +%z
-0400
  • %:z => In ra múi giờ dưới dạng số +hh:mm
$ date +%:z
-04:00
  • %::z=> In ra múi giờ dưới dạng số +hh:mm:ss
$ date +%::z
-04:00:00
  • %:::z in ra múi giờ dưới dạng số với dấu : được sử dụng khi cần thiết
$ date +%:::z
-04
  • %Z => In ra tên viết tắt của múi giờ theo bảng chữ cái
$ date +%Z
EDT

Chúng ta có thể sử dụng kết hợp nhiều tùy chọn trên với nhau để in ra chuỗi ngày tháng mong muốn.

$ date "+%d %B %Y"
07 August 2014

4. Thiết lập ngày tháng, thời gian

Chúng ta có thể thiết lập ngày tháng và thời gian như sau:

$ date -s "Chuỗi ngày tháng được định dạng"

vd:

date -s "07 August 2014 22:42:22"
Thu Aug  7 22:42:22 EDT 2014

Post navigation