This page introduce pyjalali to you. If you want rather head into class and methods’ documentation see Module Index.
In jcal source directory navigate to subdirectory sources and run python setup.py install. You must have libjalali installed before.
You can use most functionalities of standard datetime module by pyjalali.datetime:
>>> from pyjalali.datetime import datetime
>>> datetime.now()
... pyjalali.datetime.datetime(1392, 12, 1, 23, 40, 18, 772116)
>>> datetime.today() - datetime(1367, 11 1)
... datetime.timedelta(30, 85313, 805141)
There is also pyjalali.datetime.date:
>>> from pyjalali.datetime import date
>>> date.today().isoformat()
... '1392-12-01'
>>> from pytz import timezone
>>> now_in_teh = datetime.now(timezone('Asia/Tehran'))
>>> # see current time in another area
>>> in_amsterdam = now_in_teh.astimezone(timezone('Europe/Amsterdam'))
>>> print now_in_teh.time(), in_amsterdam.time()
... 10:42:03.233978 08:12:03.233978
>>> in_amsterdam == now_in_teh
... True
To convert between Hijri Shamsi and Gregorian calendars, you can use functions jalali_from_gregorian() and gregorian_from_jalali() (or respectively g2j() and j2g() for short). Also you can use datetime.datetime.gregorian to get equal datetime in Gregorian calendar. This will be cached for future uses:
>>> from datetime import datetime as _std_datetime, date as _std_date
>>> from pyjalali.datetime import jalali_from_gregorian, gregorian_from_jalali, datetime, date
>>> jd = datetime(1389, 21, 11, 12, 23, 10)
>>> gd = jd.gregorian
>>> print gd, jd
... 2011-01-30 18:23:10 1389-11-10 18:23:10
>>> gregorian_from_jalali(jd) == gd
... True
>>> jalali_from_gregorian(_std_date.today())
... pyjalali.datetime.date(1392, 12, 2)
Note unlike many Hijri Shamsi implementations, libjalali doesn’t work by converting dates to Gregorian and forwarding operations to Gregorian date. It’s a Hijri Shamsi calendar implementation from base. The only place pyjalali converts Hijri Shamsi date to Gregorian internally, is to work with pytz package in timezone aware datetimes. So keep in mind libjalali doesn’t offer a general converter for dates before UNIX Epoch and pyjalali converters will fail for them.
If you need to invoke libjalali library functions directly, you can use wrapper functions. jtime contains libjalali time functions. Functions used internally by libjalali resides in jalali. jstr contains functions for converting between dates and string representation. Core libjalali data structures are simulated in types.
>>> from pyjalali.jtime import jlocaltime
>>> print jlocaltime(int(time()))
... 1392/11/2 11-29-11 +12600 (IRST)
Note
>>> from pyjalali.datetime import utcnow
>>> utcnow()
... pyjalali.datetime.datetime(1392, 12, 1, 20, 18, 27, 651499)
pyjalali is a very thin wrapper around libjalali. Package’s version you see in pyjalali.__init__.__version__ cosists of 3 numbers describing version of libjalali which pyjalali supposed to work with it and another number that is revision of pyjalali itself. So 0.6.11.92 would expected to work with libjalali version 0.6.11.