แสดงการประทับเวลาใน dd / mm / yyyy_hh: mm: ss: ms ใน Unix หรือ Linux


26

ฉันต้องแสดงวันที่และเวลาในรูปแบบที่ต้องการใน Unix / Linux รูปแบบที่ฉันต้องการคือ: dd / mm / yyyy hh: mm: ss: ms ใน Unix หรือ Linux ฉันเข้าใกล้โดยใช้คำสั่งต่อไปนี้:

echo $(date +%x_%r)

ผลตอบแทนนี้:

08/20/2012_02:26:14 PM

ข้อเสนอแนะใด ๆ


2
มีเหตุผลอะไรบ้างที่คุณใช้echo? ดูเหมือนซ้ำซ้อนคุณสามารถใช้dateโดยตรง
lk-

ฉันวางแผนที่จะเก็บเวลาปัจจุบันไว้ในพารามิเตอร์และใช้เป็นส่วนหนึ่งของชื่อไฟล์เอาต์พุต
แฮงค์

6
ทำไมไม่ใช้สตริงวันที่จัดรูปแบบ ISO? เหล่านั้น / ไม่ดีในชื่อไฟล์ ... ( en.wikipedia.org/wiki/ISO_8601 )
Johan

ดูที่ลิงค์นี้: ccollins.wordpress.com/2009/01/06/...

รูปแบบที่พบบ่อยที่สุด: zxq9.com/archives/795
zxq9

คำตอบ:


26
date +%x_%H:%M:%S:%N

หากคุณต้องการพิมพ์เพียงสองชื่อแรกเป็น ms:

date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/'

เพื่อเก็บไว้ใน var:

VAR=$(date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/')

1
นี่เป็น Linux เฉพาะ มันไม่ทำงานบน OS X หรือ * BSD
cnst

หมายเหตุ% x ส่งคืนการแทนค่าวันที่ของโลแคล ดังนั้นจึงสามารถเปลี่ยนแปลงได้ตามตำแหน่งที่ตั้งปัจจุบัน หากคุณต้องการที่รูปแบบวันที่เฉพาะเจาะจงที่คุณอาจจะดีกว่าอย่างชัดเจนให้มัน (เป็นคำตอบอื่น ๆ date +'%d/%m/%Y_%H:%M:%S:%Nยังแสดงให้เห็นด้านล่าง)
studgeek

23

หากคุณต้องการมิลลิวินาทีแทนความแม่นยำระดับนาโนวินาทีคุณอาจใช้%3Nแทน%N:

$ date +'%d/%m/%Y %H:%M:%S:%3N'
12/04/2014 18:36:20:659

หรือด้วยการใช้งานที่คุณต้องการ$(…):

$ echo "$(date +'%d/%m/%Y %H:%M:%S:%3N')"
12/04/2014 18:36:20:659

แต่ระวังว่า%Nอาจไม่ได้ขึ้นอยู่กับระบบเป้าหมายหรือเวอร์ชั่นทุบตีของคุณ ทดสอบกับระบบสมองกลฝังตัว» GNU bash, รุ่น 4.2.37 (2) - ปล่อย (arm-buildroot-linux-gnueabi) «ไม่มี%N(ไม่ใช่ %3N):

date +"%F %T,%N"
2014-01-08 16:44:47,%N

2
หน้าตาที่ไม่ FreeBSD มิได้ Mac OSX สนับสนุนหรือ%N %3N
โจ

ฉันเพิ่มecho "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txtแต่มันเขียนfile.file 08:21:02OURCE:184 Failedไปยังล็อกไฟล์ ฉันทำอะไรผิด?
Sven

ใน macOS มีgdateHomebrew apple.stackexchange.com/a/135749/181223
phil pirozhkov


0

บางสิ่งเช่นนี้

วันที่ + '% d /% m /% Y_% H:% M:% S:% N'

ใช้% N สำหรับนาโนวินาที (000000000..999999999) เนื่องจากฉันไม่พบมิลลิวินาทีในขณะนี้


0

คุณสามารถลอง:

echo `date +"%Y_%m_%d %H:%M:%S,"``date +%N/1000000|bc -l|grep -Eo "^([0-9]{0,3})"`

ด้วยเหตุผลบางอย่าง '' 'จะถูกละไว้ดังนั้นใส่ไว้หลังเสียงสะท้อนและท้ายที่สุดหรือเพียง:

date +"[%Y_%m_%d %H:%M:%S,%3N]"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.