包含時間戳的文件名的首選格式
眾所周知,“unix”可以在文件中包含除 ‘/’ 和 ‘\0’ 之外的任何內容,但係統管理員的偏好往往要小得多,這主要是因為沒有人喜歡空格作為輸入……還有一堆東西’:’ 和 ‘@’ 的特殊含義。
最近我看到了另一種在文件名中使用時間戳的情況,在使用不同的格式使其“更好”之後,我想我會嘗試找到一個“最佳實踐”,而不是看到一個我想我只是在這裡問一下,看看人們是怎麼想的。
可能的“常見”解決方案(p=prefix 和 s=suffix):
- syslog/logrotate/DNS 類似格式:
p-%Y%m%d-suffix = prefix-20110719-s p-%Y%m%d%H%M-suffix = prefix-201107191732-s p-%Y%m%d%H%M%S-suffix = prefix-20110719173216-s
優點:
這是“常見的”,所以“足夠好”可能比“最好”更好。
沒有奇怪的字元。
很容易將“日期/時間 blob”與其他所有內容區分開來。缺點:
僅日期版本不容易閱讀,包括時間讓我的眼睛流血,秒也只是“哈哈”。
假設 TZ。
- ISO-8601- 格式
p-%Y-%m-%d-s = p-2011-07-19-s p-%Y-%m-%dT%H:%M%z-s = p-2011-07-19T17:32-0400-s p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T17:32:16-0400-s p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T23:32:16+0200-s
優點:
沒有空間。
考慮到 TZ。
人類閱讀“不錯”(僅日期是好的)。
可以通過 $(date –iso={hours,minutes,seconds}) 生成缺點:
SCP/焦油/等。不會喜歡那些 ‘:’ 字元。
“正常”人需要一點時間才能看到’T’代表的WTF,最後是什麼:)。
很多’-‘字元。
- RFC-3339 格式
p-%Y-%m-%d-s = p-2011-07-19-s p-%Y-%m-%d %H:%M%:z-s = p-2011-07-19 17:32-04:00-s p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 17:32:16-04:00-s p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 23:32:16+02:00-s
優點:
考慮到 TZ。
“所有人”都可以輕鬆閱讀。
可以區分日期/時間和前綴/後綴。
上面的一些可以用 $(date –iso={hours,seconds}) 生成缺點:
在時間版本中有空格(這意味著所有程式碼都會討厭它)。
SCP/焦油/等。不會喜歡那些 ‘:’ 字元。
- 我喜歡連字元:
p-%Y-%m-%d-s = p-2011-07-19-s p-%Y-%m-%d-%H-%M-s = p-2011-07-19-17-32-s p-%Y-%m-%d-%H-%M-%S-s = p-2011-07-19-23-32-16-s
優點:
基本上是一個稍微好一點的系統日誌/等。變體。缺點:
很多’-‘字元。
假設 TZ。
- 我喜歡帶有副檔名的連字元:
p.%Y-%m-%d.s = p.2011-07-19.s p.%Y-%m-%d.%H-%M.s = p.2011-07-19.17-32.s p.%Y-%m-%d.%H-%M-%S.s = p.2011-07-19.23-32-16.s
優點:
基本上是一個稍微好一點的“我喜歡連字元”變體。
沒有奇怪的字元。
可以區分日期/時間和前綴/後綴。缺點:
使用 ‘。’ 這裡有點非傳統。
假設 TZ。
…所以任何人都想給出一個偏好和一個理由,或者不止一個(例如,如果 95+% 留在機器本地,則不要關心 TZ,但如果不是,則非常關心)。
或者,顯然,上面列表中沒有的東西。
- 應盡可能遵守 ISO 8601 格式,因為它是最接近標準的東西。
- “T”不足以成為真正保證擺脫它的絆腳石。
- ‘:’ 是潛在的殺手,所以應該避免。
- 由於其他人的答案中提到的原因,應該使用 UTC(或“Z”時間)。
- ISO 8601 包括使用 UTC(‘Z’ 時間)的格式,應該使用它。
- ISO 8601 包含一種不使用“:”字元的格式,應該使用該字元。
所以…範例“最佳”日期時間格式:
- 20120317T1748Z
- 100% 符合 ISO 8601
- 僅限字母數字字元(對系統管理員非常友好)
- 不是最快的閱讀,但外行肯定可以閱讀
- 2012-03-17T1748Z
- 日期部分符合 ISO 8601
- 時間部分符合 ISO 8601
- 日期和時間之間的轉換符合 ISO 8601
- 將 ISO 8601“擴展”格式(帶連字元的日期、帶冒號的時間)與 ISO 8601 的“基本”格式(不帶連字元的日期、不帶冒號的時間)混合,這可能不太正確
- 添加 ‘-’ 字元(與 1 相比)
- 外行人更容易閱讀(vs 1.)
- 2012-03-17–1748Z
- 日期部分符合 ISO 8601
- 時間部分符合 ISO 8601
- 日期和時間之間的轉換不符合 ISO 8601
- 將 ISO 8601“擴展”格式與 ISO 8601“基本”格式混合
- 外行人更容易閱讀(對比 1. 和 2.)
- 沒有新角色(vs 2.)
我偏愛 1. 因為它完全是 IAW 標準,但其他標準很接近。
注意::當然,根據需要添加秒數。…是的,有或沒有秒(甚至幾分鐘)都是 IAW ISO 8601。:)