«Стандартный» формат для использования метки времени как части имени файла [закрыто]

85

Я искал стандартный формат для использования даты / времени в качестве части имени файла и не смог ничего придумать.

Мой вопрос состоит из двух частей:

Использует метки времени для обеспечения уникальности в именах файлов плохая практика?

Я мог бы получить время от даты создания и сериализовать имена файлов (file0001.bak, file0002.bak и т. Д.), Но только включение отметки времени позволяет выполнять такие операции с файлами, как mv 2011-01* somewhere/. Есть ли недостаток в использовании этого типа системы именования?

Формат, который я использую, это YYYY-mm-dd_HH-MM-SS.

Есть ли лучший формат, который я должен использовать?

С этим форматом я должен быть обеспокоен совместимостью файловой системы, проблемами str_to_date_parsing и т. Д.?

Спасибо!

редактировать:

Возможно, я хотел бы пропустить бит уникальности принудительного применения, так как это единственный пользователь, создающий резервную копию с помощью cronjob (не должно быть никаких проблем параллелизма).

kriegar
источник
9
Как правило, я просто использую YYYYmmddHHMMSS, тогда он может быть отсортирован / отфильтрован численно или лексически.
Orbling
Я использую "гггг ммдд ччмм". Моя фирма имеет глобальный охват, поэтому я использую время по Гринвичу. Так что, когда я пишу это, это будет «2011 0325 0245», потому что сейчас время в Лондоне (и сейчас они все еще в стандартном времени). Если я хочу указать местное время, которое для меня является восточным, то я бы использовал «гггг ммдд ччмм ET».
Майк Розенблюм
С начала эпохи я использую секунды, поэтому мне не приходится иметь дело с часовыми поясами, високосными годами и дневным светом. Также облегчает вычисление даты и времени.
dietbuddha
1
См. Также: serverfault.com/questions/292014/…
Zero3
2
Я предлагаю формат, основанный на ISO 8601, в посте на blog.xam.de/2016/07/… - сделает наш мир проще, если мы сможем договориться о формате :-)
доктор Макс Фелькель

Ответы:

62

Следует учитывать формат ISO 8601 (2013-04-01T13: 01: 02). Да, есть стандарты для этих вещей. Двоеточия и дефисы могут быть опущены.

Строка формата, которую я обычно использую, %Y%m%dT%H%M%Sдает 20130401T130102. В зависимости от требований я опускаю значения слева. В скрипте bash я получаю дату в виде строки:

LOGDATE=$(date +%Y%m%dT%H%M%S)
BillThor
источник
32
Двоеточия обязательно должны быть опущены, если вы работаете в системе Windows, поскольку они недопустимы в имени файла!
Carson63000
2
Для тех, кто использует strftime, строка формата"%Y-%m-%dT%H:%M:%S%z"
Алек Якобсон
6
Я использую YYYY-MM-DD-HHMMSS(я мог бы опустить SSв некоторых случаях). Часть даты вполне читаема, а часть времени достаточно читаема для большинства целей.
Кит Томпсон
15
Стандартный или нет, «20130401T1301102» не очень удобен для пользователя. Мои глаза болят, когда я вижу программные журналы с такими отметками времени в своих именах.
Ноль3
1
2019.04.01-13.01.02.JPGили похожие имена (например 190401-130102.JPG:) лучше для глаз. @ Zero3
С.Серпушан
4

Я искал стандартный формат для использования даты / времени в качестве части имени файла и не смог ничего придумать.

Мой вопрос состоит из двух частей:

Является ли использование метки времени для обеспечения уникальности имен файлов плохой практикой?

Нет, все хорошо.

Я мог бы получить время от даты создания и сериализовать имена файлов (file0001.bak, file0002.bak и т. Д.)

Нумерация их последовательно - это больше работы. Думайте о метке времени как о возрастающей, но непоследовательной нумерации.

но только включение метки времени позволяет выполнять файловые операции, такие как mv 2011-01 * где-нибудь /. Есть ли недостаток в использовании этого типа системы именования?

Нет, это делается все время.

Я использую формат ГГГГ-мм-дд_ЧЧ-ММ-СС.

Это хорошо, потому что они будут отсортированы в хронологическом порядке. Я бы потерял подчеркивание только потому, что легче набрать дефис.

Есть ли лучший формат, который я должен использовать?

На самом деле, нет.

Кевин Клайн
источник
2
Я бы сказал: «Используйте стандартный формат времени ISO». Итак, ГГГГ-мм-ддЧЧ: ММ: СС (или ггггммдд ЧЧММСС).
Ватин
3

Это зависит от вашего приложения. Иногда можно использовать временную метку, подобную той, которую вы описали. Иногда, когда возникает конфликт имен, вы можете использовать генератор GUID .

grokus
источник
2

Формат, который вы используете, подходит, но если вам нужна уникальность, а время не имеет другого значения, у вас может быть проблема параллелизма в приложении, если приложение используется несколькими пользователями одновременно, и все они приводят к созданию файлов в одном и том же папка. Если вы просто хотите уникальности, вы можете подумать о создании GUID и об удалении любых недопустимых символов, таких как фигурные скобки и тире, и использовать его в качестве имени файла.

M.Sameer
источник
2

Использование формата ISO 8601 также позволяет сортировать файлы по дате (при условии, что все они имеют одинаковый префикс).

http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm
http://en.wikipedia.org/wiki/ISO_8601

Tangurena
источник
5
Я думаю, что вы пытаетесь сказать, что сортировка лексически заканчивается сортировкой по дате.
Майкл Кохне
-3

У ФБР есть «единственная» проблема с пользователем, которая заключается в резервном копировании 100 миллионов отпечатков пальцев при аресте, полученных от всех полицейских во всем мире ...

... они начинаются с даты: ггггммдд

Я не знаю, как они продолжаются. Я продолжаю с хм и для меня это делает.

Использование GMT ​​/ Zulu звучит как отличная идея для глобального решения. Лично я использую ET, и ФБР «лично» также использует ET, так как именно там они находятся.

Дейв
источник
3
Это ничего не добавляет к гораздо более общему обсуждению в других постах, которое фактически затрагивает такие аспекты, как юридические символы, сортировка и уникальность.
Мартин Питерс