Не приходилось ли вам сочинять какие-нибудь «уникальные идентификаторы», желательно — понеповторимее, покороче и чтоб глазом были вполне читаемы? Думаю, многие сталкивались с такой задачкой. Стандартные функции (типа GUID) — это скучно и очень «длинно». Отметаем сразу. Часто для уникальности берутся (как один из компонентов) дата и время. Попробуем и мы их использовать. И чтоб покомпактнее было, возьмем шумеро-вавилонскую 60-ричную систему счисления (что применительно к единицам времени будет довольно естественно). Как и в случае с 16-ричной системой, дополним обычные цифры буквами: 0-9, A-Z, a-x — ровно 10+26+24=60 знаков. Заметим, что кодировка MIME Base64 использует похожий набор «цифр», но в другом порядке: A-Z, a-z, 0-9, а также + и /.
По-моему, данный порядок не вполне удобен, т.к. нарушается привычная лексикографическая упорядоченность.
Сначала займемся временем. Для минут и секунд потребуется ровно по одной нашей «цифре». Для часов — тем паче, одного знака хватит. Возьмем еще и «терции» (=1/60 сек). Итого — четыре знака. Компактно, достаточно (для многих применений) уникально, читабельно и даже… понимабельно: DC9x = 13:12′09″59 = 13 час 12 мин 09 сек 59 терций. Можно ещё и слегка огрублённые «кварты» справа добавить; у меня (в Visual FoxPro) функция seconds() выдаёт время с точностью до 0.001 сек, считая от полуночи. Проверено, точность соблюдается. Но мне не очень надо.
Теперь дата. Месяц и день — две цифры: 9N = 23 сентября. Год от Р.Х. — тоже две. Хватит до 3599 года (xx-ного «по-нашему»). Если кто надеется дожить до 3600-го (т.е., 100-го в нашей системе), пусть добавит слева ещё один разряд. А мне пока и двух хватит.
Давайте, из любопытства посмотрим, в каком году мы сейчас живём. Делим 2013 на 60 с остатком, получаем два разряда: (33,33). Чёрт побери, неожиданно красиво! А как это будет в 60-ричной записи? А вот так: XX. Т.е., получается, что хотя до года с номером xx мы и не доживём, зато в году XX живём прямо сегодня. (Учтя завтрашнюю дату, XX41, можно заметить, что нынешний год XX — явно «женский», а следующий будет «мужским», XY. Такая вот шумеро-вавилонская магия чисел...)
Date/Time stamp of the post = XX3VHFx3
По-моему, данный порядок не вполне удобен, т.к. нарушается привычная лексикографическая упорядоченность.
Сначала займемся временем. Для минут и секунд потребуется ровно по одной нашей «цифре». Для часов — тем паче, одного знака хватит. Возьмем еще и «терции» (=1/60 сек). Итого — четыре знака. Компактно, достаточно (для многих применений) уникально, читабельно и даже… понимабельно: DC9x = 13:12′09″59 = 13 час 12 мин 09 сек 59 терций. Можно ещё и слегка огрублённые «кварты» справа добавить; у меня (в Visual FoxPro) функция seconds() выдаёт время с точностью до 0.001 сек, считая от полуночи. Проверено, точность соблюдается. Но мне не очень надо.
Теперь дата. Месяц и день — две цифры: 9N = 23 сентября. Год от Р.Х. — тоже две. Хватит до 3599 года (xx-ного «по-нашему»). Если кто надеется дожить до 3600-го (т.е., 100-го в нашей системе), пусть добавит слева ещё один разряд. А мне пока и двух хватит.
Давайте, из любопытства посмотрим, в каком году мы сейчас живём. Делим 2013 на 60 с остатком, получаем два разряда: (33,33). Чёрт побери, неожиданно красиво! А как это будет в 60-ричной записи? А вот так: XX. Т.е., получается, что хотя до года с номером xx мы и не доживём, зато в году XX живём прямо сегодня. (Учтя завтрашнюю дату, XX41, можно заметить, что нынешний год XX — явно «женский», а следующий будет «мужским», XY. Такая вот шумеро-вавилонская магия чисел...)
Date/Time stamp of the post = XX3VHFx3