คุณจะระบุรูปแบบสำหรับอินพุตได้อย่างไร


19

กำหนดวันที่และเวลาในรูปแบบที่ไม่รู้จักdateฉันdateจะรู้วันและเวลาได้อย่างไร

ตัวอย่างเช่น:

$ 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-optionอยู่? ถ้าไม่มีวิธีที่สวยงามกว่านี้ในการแก้ปัญหาแทนที่จะใช้sedเพื่อแปลงอินพุตเป็นสตริงวันที่ที่มีรูปแบบที่ดีหรือไม่


คำตอบ:


10

ทั้ง POSIX มิได้วัน GNU --magic-optionมี FreeBSD เรียกมันว่า-f(มีรูปแบบคล้ายกับตัวdateระบุรูปแบบเอาต์พุตของไม่ใช่ตัวที่คุณเสนอ)

วันที่ของคุณใกล้เคียงกับการรับรู้ของวันที่ของ GNU: สิ่งที่ต้องทำคือแทนที่โคลอนที่แยกวันที่ออกจากเวลาด้วยช่องว่าง

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

1
และด้วยรูปแบบที่กำหนดเอง หนทางเดียวที่จะไปคือการแสดงออกปกติ? นี่มันแย่มาก :-(
phil294

1
01/02/03คุณสามารถวันที่ไม่ได้แยกโดยไม่ทราบว่าบางสิ่งบางอย่างเกี่ยวกับรูปแบบที่พวกเขากำลังอยู่ในตัวอย่างเป็นคลาสสิก
Gilles 'หยุดชั่วร้าย'

5

ฉันเขียนเครื่องมือมากมาย ( dateutils ) ที่จัดการกับวันที่และเวลาด้วยวิธีที่เป็นมิตรกับสคริปต์มากขึ้น ตัวเลือกมายากลของคุณมี--input-format|-iเช่น:

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

แม้ว่าdconvจะไม่สนับสนุนdateรูปแบบเอาต์พุตโดยตรง(ไม่ได้ให้TZสิ่งใดเลยในสภาพแวดล้อม) แต่ก็มีเครื่องมือstrptimeในdateutilsที่รองรับตัว%Zระบุรูปแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.