https://github.com/mhajiloo/persiantools
Jalali date and datetime with other tools
https://github.com/mhajiloo/persiantools
datetime gregorian jalali jalali-datetime jdate jdatetime persian persiantools python shamsi
Last synced: 6 months ago
JSON representation
Jalali date and datetime with other tools
- Host: GitHub
- URL: https://github.com/mhajiloo/persiantools
- Owner: mhajiloo
- License: mit
- Archived: true
- Created: 2016-05-26T12:41:07.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2020-02-13T10:16:28.000Z (about 5 years ago)
- Last Synced: 2024-08-05T06:02:04.385Z (9 months ago)
- Topics: datetime, gregorian, jalali, jalali-datetime, jdate, jdatetime, persian, persiantools, python, shamsi
- Language: Python
- Homepage:
- Size: 166 KB
- Stars: 68
- Watchers: 5
- Forks: 5
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PersianTools
[](https://pypi.org/project/persiantools/)
[](https://travis-ci.org/mhajiloo/persiantools)
[](https://ci.appveyor.com/project/mhajiloo/persiantools/branch/master)
[](https://coveralls.io/github/mhajiloo/persiantools?branch=master)
[](https://pypi.org/project/persiantools/)
[](https://pypi.org/project/persiantools/)- Jalali (Shamsi) date and datetime (based on python datetime's module)
- Convert Jalali to Gregorian date/datetime and vice versa
- Support comparison and arithmetic operators such as `+`, `-`, `==`, `>=`
- Support timezone- Convert Arabic and Persian characters/digits to each other
## Install Package
```{.sourceCode .bash}
pip install persiantools
```## How to use
### Date
```{.sourceCode .python}
>>> from persiantools.jdatetime import JalaliDate
>>> import datetime>>> JalaliDate.today()
JalaliDate(1395, 4, 18, Jomeh)>>> JalaliDate(1369, 7, 1)
JalaliDate(1369, 7, 1, Yekshanbeh)>>> JalaliDate(datetime.date(1990, 9, 23)) # Gregorian to Jalali
JalaliDate(1369, 7, 1, Yekshanbeh)>>> JalaliDate.to_jalali(2013, 9, 16) # Gregorian to Jalali
JalaliDate(1392, 6, 25, Doshanbeh)>>> JalaliDate(1392, 6, 25).to_gregorian() # Jalali to Gregorian
datetime.date(2013, 9, 16)>>> JalaliDate.fromtimestamp(578707200) # Timestamp to Jalali
JalaliDate(1367, 2, 14, Chaharshanbeh)
```### Datetime
```{.sourceCode .python}
>>> from persiantools.jdatetime import JalaliDateTime
>>> import datetime, pytz>>> JalaliDateTime.now()
JalaliDateTime(1395, 4, 18, 1, 43, 24, 720505)>>> JalaliDateTime.now().to_gregorian() # Jalali to Gregorian
datetime.datetime(2016, 7, 8, 1, 43, 24, 720505)>>> JalaliDateTime.to_jalali(datetime.datetime(1988, 5, 4, 14, 0, 0, 0)) # Gregorian to Jalali
JalaliDateTime(1367, 2, 14, 14, 0)>>> JalaliDateTime.fromtimestamp(578723400, pytz.timezone("Asia/Tehran")) # Timestamp to Jalali
JalaliDateTime(1367, 2, 14, 8, 0, tzinfo=)>>> JalaliDateTime.now(pytz.utc)
JalaliDateTime(1395, 4, 17, 21, 23, 53, 474618, tzinfo=)
```### Format
Based on python `strftime()` behavior
```{.sourceCode .python}
>>> from persiantools.jdatetime import JalaliDate, JalaliDateTime
>>> import pytz>>> JalaliDate(1367, 2, 14).isoformat()
'1367-02-14'>>> JalaliDate(1395, 3, 1).strftime("%Y/%m/%d")
'1395/03/01'>>> JalaliDateTime(1369, 7, 1, 14, 0, 10, 0, pytz.utc).strftime("%c")
'Yekshanbeh 01 Mehr 1369 14:00:10'>>> JalaliDateTime.now(pytz.utc).strftime("%I:%M:%S.%f %p %z %Z")
'01:49:22.518523 PM +0000 UTC'
```### Digit/Character converter
```{.sourceCode .python}
>>> from persiantools import characters, digits>>> digits.en_to_fa("0987654321")
'۰۹۸۷۶۵۴۳۲۱'>>> digits.ar_to_fa("٠٩٨٧٦٥٤٣٢١") # or digits.ar_to_fa(u"٠٩٨٧٦٥٤٣٢١")
'۰۹۸۷۶۵۴۳۲۱'>>> digits.fa_to_en("۰۹۸۷۶۵۴۳۲۱")
'0987654321'>>> digits.fa_to_ar("۰۹۸۷۶۵۴۳۲۱")
'٠٩٨٧٦٥٤٣٢١'>>> characters.ar_to_fa("كيك")
'کیک'
```### Operators
```{.sourceCode .python}
>>> from persiantools.jdatetime import JalaliDate, JalaliDateTime
>>> import datetime>>> JalaliDate(1367, 2, 14) == JalaliDate(datetime.date(1988, 5, 4))
True>>> JalaliDateTime(1367, 2, 14, 4, 30) >= JalaliDateTime(1369, 7, 1, 1, 0)
False>>> JalaliDate(1367, 2, 14) == datetime.date(1988, 5, 4)
True>>> JalaliDate(1395, 2, 14) + datetime.timedelta(days=38)
JalaliDate(1395, 3, 21, Jomeh)>>> JalaliDateTime(1395, 12, 30) - JalaliDateTime(1395, 1, 1)
datetime.timedelta(365)
```### Serializing and de-serializing
```{.sourceCode .python}
>>> from persiantools.jdatetime import JalaliDate
>>> import pickle>>> # Serializing
>>> file = open("save.p", "wb")
>>> pickle.dump(JalaliDate(1367, 2, 14), file)
>>> file.close()>>> # de-serializing
>>> file = open("save.p", "rb")
>>> jalali = pickle.load(file)
>>> file.close()
>>> jalali
JalaliDate(1367, 2, 14, Chaharshanbeh)
```