https://github.com/sloev/hashdate
Turns Python datetimes (or iso dates with cli) into hashes.
https://github.com/sloev/hashdate
datetime hash python3
Last synced: 10 months ago
JSON representation
Turns Python datetimes (or iso dates with cli) into hashes.
- Host: GitHub
- URL: https://github.com/sloev/hashdate
- Owner: sloev
- License: mit
- Created: 2020-05-13T22:09:08.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-05-13T22:21:30.000Z (over 5 years ago)
- Last Synced: 2025-03-06T05:17:30.075Z (11 months ago)
- Topics: datetime, hash, python3
- Language: Python
- Homepage:
- Size: 81.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

# HashDate
[](https://pypi.python.org/pypi/hashdate) [](https://opensource.org/licenses/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:
```bash
$ hashdate demo
```
Its full of colors:
[](https://asciinema.org/a/kKaOD68BJXa11WA1ghW7vjqii)
Turn your iso date into a hash:
```bash
$ 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:
```bash
$ hashdate hash2date UCABCBDCCDA
datetime: 2020-05-13T22:30:00
```
you can also secify to use emojis for charset if you want to:
```bash
$ hashdate date2hash 2020-05-13T22:30:47.136450 -c emoji
hash: 🌹🐲🌼🥕🐲🥕🌲🐲🐲🌲🌼🍇🐐🥕🌲🌴🍇🐂🌼
```
and back again:
```bash
$ hash2date 🌹🐲🌼🥕🐲🥕🌲🐲🐲🌲🌼🍇🐐🥕🌲🌴🍇🐂🌼 -c emoji
datetime: 2020-05-13T22:30:47.136450
```
## Module usage
```python
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:
```python
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:
```python
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]
```