Xuất giá trị ngày tháng hiện tại theo định dạng mong muốn trong *nix OS

Có rất nhiều trường hợp cần phải tạo ra một giá trị xuất là ngày tháng hiện tại theo định dạng cho trước. Có thể là để inspect hệ thống, ghi log, hay kinh điển nhất là khi cần tạo ra các file backup (html-20200718T1342.tar.gz chẳng hạn).

Tạo chuỗi ngày tháng

Việc xuất ra thông tin thời gian hiện tại được thực hiện bởi câu lệnh date:

❯ date
Sun Jul 19 07:34:09 +07 2020

Để xuất theo định dạng cho trước thì có thể sử dụng cú pháp date +"%FORMAT_STRING":

❯ date +"%m_%d_%Y"
07_19_2020
❯ date +"%Y-%m-%d"
2020-07-19

Có thể đặt giá trị xuất ra vào một biến để sử dụng lại:

now=$(date +"%m_%d_%Y")
printf "%s\n" $now
today=$(date +"%Y-%m-%d")
printf "Backing up to /efs/my-blog-${today}.sql.tar.gz"

hoặc đơn giản hơn:

now=`date +"%m_%d_%Y"`
now=`date +"%Y-%m-%d"`
echo "${now}"

Các ký tự định dạng cho câu lệnh date

Các ký tự định dạng giúp điều khiển kết quả xuất theo mô tả như dưới đây. Thông tin được lấy từ  man page của GNU/date.

  • %a – tên viết tắt của ngày trong tuần (theo địa hạt) (e.g., Sun)
  • %A – tên đầy đủ của ngày trong tuần (theo địa hạt) (e.g., Sunday)
  • %b – tên viết tắt của tháng (theo địa hạt) (e.g., Jan)
  • %B – tên đầy đủ của tháng (theo địa hạt) (e.g., January)
  • %C – thế kỷ; tương tự như %Y được bỏ 2 chữ số cuối đi (e.g., 20)
  • %d – ngày trong tháng (e.g., 01)
  • %D – ngày (viết tắt); tương đương %m/%d/%y
  • %F – ngày (viết đầy đủ); tương đương %Y-%m-%d
  • %g – hai chữ số cuối của năm của %V (xem %V)
  • %G – năm của %V (xem %V)
  • %H – giờ (00..23)
  • %I – giờ (01..12)
  • %j – ngày trong năm (001..366)
  • %m – tháng (01..12)
  • %M – phút (00..59)
  • %n – một dòng mới
  • %N – na-nô giây (000000000..999999999)
  • %p – thể hiện theo địa hạt của AM và PM (nếu date không biết nó sẽ bỏ trống)
  • %P – giống %p, nhưng viết thường
  • %q – quý của năm (1..4)
  • %r – giờ phút giây theo đồng hồ 12 tiếng, theo địa hạt (e.g., 11:11:04 PM)
  • %R – giờ phút theo đồng hồ 24 tiếng, theo địa hạt, tương đương %H:%M
  • %s – giây kể từ 1970-01-01 00:00:00 UTC
  • %S – giây trong phút (00..60)
  • %T – giờ; tương đương %H:%M:%S
  • %u – ngày trong tuần (1..7); 1 là Thứ Hai
  • %U – tuần trong năm, tính theo ngày đầu tuần là Chủ Nhật (00..53)
  • %V – tuần trong năm theo ISO, với ngày đầu tuần là thứ 2 (01..53)
  • %w – ngày trong tuần (0..6); 0 là Chủ Nhật
  • %W – tuần trong năm, với ngày đầu tuần là Thứ Hai (00..53)
  • %x – ngày theo địa hạt (e.g., 12/31/99)
  • %X – giờ theo địa hạt (e.g., 23:13:48)
  • %y – hai chữ số cuối của năm hiện tại (00..99)
  • %Y – năm
  • %z – bù trừ múi giờ dạng +hhmm (e.g., -0400)
  • %:z – bù trừ múi giờ dạng +hh:mm (e.g., -04:00)
  • %::z – bù trừ múi giờ dạng +hh:mm:ss (e.g., -04:00:00)
  • %:::z – bù trừ múi giờ gần đúng (e.g., -04, +05:30)
  • %Z – tên viết tắt của múi giờ (e.g., EDT)
_

Leave a Comment

Your email address will not be published. Required fields are marked *