Skip to main content

Datetime to fixed hash. Shortable for lower precision

Project description

hashdate

HashDate

Latest Version License: MIT

Turns Python datetimes (or iso dates with cli) into hashes.

The hashes support shortening to reduce precision, so a prefix of a hash will be the same datetime rounded to the given hashlength.

Cli usage

Check out the demo:

$ hashdate demo

Its full of colors:

asciicast

Turn your iso date into a hash:

$ hashdate date2hash 2020-05-13T22:30:47.136450
hash: UCABCBDCCDAEHBDGEFA

Then if you only take the first 11 chars you get a datetime with less precision:

$ hashdate hash2date UCABCBDCCDA
datetime: 2020-05-13T22:30:00

you can also secify to use emojis for charset if you want to:

$ hashdate date2hash 2020-05-13T22:30:47.136450 -c emoji
hash: ๐ŸŒน๐Ÿฒ๐ŸŒผ๐Ÿฅ•๐Ÿฒ๐Ÿฅ•๐ŸŒฒ๐Ÿฒ๐Ÿฒ๐ŸŒฒ๐ŸŒผ๐Ÿ‡๐Ÿ๐Ÿฅ•๐ŸŒฒ๐ŸŒด๐Ÿ‡๐Ÿ‚๐ŸŒผ

and back again:

$ hash2date ๐ŸŒน๐Ÿฒ๐ŸŒผ๐Ÿฅ•๐Ÿฒ๐Ÿฅ•๐ŸŒฒ๐Ÿฒ๐Ÿฒ๐ŸŒฒ๐ŸŒผ๐Ÿ‡๐Ÿ๐Ÿฅ•๐ŸŒฒ๐ŸŒด๐Ÿ‡๐Ÿ‚๐ŸŒผ -c emoji
datetime: 2020-05-13T22:30:47.136450

Module usage

import datetime
from hashdate import datetime_to_hash, hash_to_datetime

now = datetime.datetime.now()
hash = datetime_to_hash(now)
dt = hash_to_datetime(hash)
assert now == dt

Advanced

Use emojis:

import datetime
from hashdate import datetime_to_hash, hash_to_datetime

now = datetime.datetime.now()
hash = datetime_to_hash(now, charset='emoji')
dt = hash_to_datetime(hash, charset='emoji')
assert now == dt

Register more charsets:

import datetime
from hashdate import register_charset, datetime_to_hash, hash_to_datetime

charset = "๐ŸŒผ๐Ÿฅ•๐Ÿฒ๐ŸŒฒ๐Ÿ‡๐Ÿ‚๐ŸŒด๐Ÿ๐Ÿ‰๐ŸŒบ๐ŸŠ๐Ÿฝ๐Ÿ†๐ŸฆŽ๐ŸŸ๐ŸŒฑ๐Ÿซ๐Ÿ๐Ÿƒ๐Ÿ๐ŸŒน๐Ÿ•โ˜˜๐ŸŒฟ๐Ÿฅ“๐Ÿช๐ŸŒท๐Ÿต๐Ÿ”ฅ๐Ÿท๐ŸŒณ๐ŸŒถ๐Ÿฅ’๐ŸŠ๐Ÿ—๐Ÿ๐ŸŒต๐ŸŒป๐ŸŒฝ๐Ÿข๐Ÿ‹๐Ÿˆ๐Ÿ’ฎ๐ŸŽƒ๐ŸŒŠ๐Ÿฅ”๐ŸŒฐ๐Ÿ€๐Ÿƒ๐Ÿ’ง๐Ÿ’๐Ÿ‚๐Ÿฎ๐ŸŒธ๐Ÿ„๐Ÿ„๐Ÿ๐Ÿž๐Ÿฅœ๐Ÿ‘๐Ÿฅ€๐ŸŒญ๐Ÿธ๐Ÿ–"

register_charset('my_emojis', charset)

now = datetime.datetime.now()
hash = datetime_to_hash(now, charset='my_emojis')
dt = hash_to_datetime(hash, charset='my_emojis')
assert now == dt

Structure of a hashdate

centenial: [...19,20,21...]
|    quarter start month: [0,3,6,9]
|    |   day in tens: [0:3]
|    |   |   hour in tens: [0:5]
|    |   |   |   minute in tens: [0:5]
|    |   |   |   |   second in tens: [0:5]
|    |   |   |   |   |   microsecond digits:[0:999999]
|    |   |   |   |   |   |
U CA B C B D C B A F C E BCDAAB  
  |    |   |   |   |   | 
  |    |   |   |   |   second: [0:9]
  |    |   |   |   minute: [0:9]
  |    |   |   hour: [0:9]
  |    |   day: [0:9]
  |    month in quarter: [0,1,2]
  year: [0:99]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for hashdate, version 1.0.3
Filename, size File type Python version Upload date Hashes
Filename, size hashdate-1.0.3-py3-none-any.whl (7.2 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size hashdate-1.0.3.tar.gz (6.7 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page