Làm thế nào để bạn xác định một định dạng cho đầu vào cho đến nay?


19

Đưa ra một ngày và thời gian trong một định dạng không được công nhận bởi date, làm thế nào tôi có datethể nhận ra ngày và giờ?

Ví dụ:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

--magic-optiontồn tại? Nếu không, có cách nào thanh lịch hơn để giải quyết vấn đề này hơn là sử dụng sedđể chuyển đổi đầu vào thành chuỗi ngày được định dạng tốt không?


Câu trả lời:


10

Cả ngày POSIX và GNU đều không có --magic-option. FreeBSD gọi nó -f(với một cú pháp tương tự như datecác chỉ định định dạng đầu ra, không phải là cú pháp bạn đề xuất).

Ngày của bạn rất gần với việc được công nhận bởi ngày GNU: tất cả những gì bạn cần là thay thế dấu hai chấm ngăn cách ngày với thời gian bằng một khoảng trắng.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
và với các định dạng tùy chỉnh? Cách duy nhất để đi là biểu thức thông thường? điều này thật kinh khủng :-(
phil294

1
Bạn không thể phân tích ngày mà không biết gì về định dạng của chúng, ví dụ cổ điển 01/02/03.
Gilles 'SO- ngừng trở nên xấu xa'

5

Tôi đã viết một loạt các công cụ ( dateutils ) liên quan đến ngày và thời gian theo cách thân thiện với kịch bản hơn. Tùy chọn ma thuật của bạn có --input-format|-i, ví dụ:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

Trong khi dconvkhông trực tiếp hỗ trợ dateđịnh dạng đầu ra 's (nó không trao TZhoặc bất cứ điều gì trong môi trường), có một công cụ strptimetrong dateutils mà không hỗ trợ các %Zđịnh tố định dạng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.