khayyam
khayyam copied to clipboard
A Persian Date & Time (aka: Jalali Calendar) library with timezone, DST (daylight-saving), full formatting & parsing support for python 2.x & 3.x.
khayyam
.. image:: http://img.shields.io/pypi/v/khayyam.svg :target: https://pypi.python.org/pypi/khayyam
.. image:: https://travis-ci.org/pylover/khayyam.svg?branch=master :target: https://travis-ci.org/pylover/khayyam
.. image:: https://coveralls.io/repos/github/pylover/khayyam/badge.svg?branch=master :target: https://coveralls.io/github/pylover/khayyam?branch=master
.. image:: https://img.shields.io/badge/license-GPLv3-brightgreen.svg :target: https://github.com/pylover/khayyam/blob/master/LICENSE
.. image:: https://pepy.tech/badge/khayyam :target: https://pepy.tech/project/khayyam
.. image:: https://pepy.tech/badge/khayyam/month :target: https://pepy.tech/project/khayyam
.. image:: https://pepy.tech/badge/khayyam/week :target: https://pepy.tech/project/khayyam
Jump To: ^^^^^^^^
-
Documentation <http://khayyam.dobisel.com>
_ -
Python package index <https://pypi.python.org/pypi/khayyam>
_ -
Source on github <https://github.com/pylover/khayyam>
_ -
Downloads <https://pypi.python.org/pypi/Khayyam#downloads>
_
Basic Usage ^^^^^^^^^^^
>>> from khayyam import *
>>> JalaliDate(1346, 12, 30)
khayyam.JalaliDate(1346, 12, 30, Chaharshanbeh)
>>> JalaliDatetime(989, 3, 25, 10, 43, 23, 345453)
khayyam.JalaliDatetime(989, 3, 25, 10, 43, 23, 345453, Seshanbeh)
Current date and time ^^^^^^^^^^^^^^^^^^^^^
>>> print(JalaliDatetime.now())
khayyam.JalaliDatetime(1394, 5, 18, 16, 4, 48, 628383, Yekshanbeh)
>>> print(JalaliDatetime.now(TehranTimezone()) - timedelta(days=6*30))
1393-11-02 20:01:11.663719+03:30
>>> print(JalaliDate.today())
1394-4-30
Parsing & Formatting ^^^^^^^^^^^^^^^^^^^^
>>> print(JalaliDatetime.now().strftime('%C'))
شنبه ۳ مرداد ۱۳۹۴ ۰۲:۳۷:۵۲ ب.ظ
>>> JalaliDatetime.strptime(u'چهارشنبه ۳۱ تیر ۱۳۹۴ ۰۵:۴۵:۴۰ ب.ظ', '%C')
khayyam.JalaliDatetime(1394, 4, 31, 17, 45, 40, 0, Chaharshanbeh)
Converting ^^^^^^^^^^
>>> from datetime import date, datetime
>>> JalaliDate(1394, 4, 31).todate()
datetime.date(2015, 7, 22)
>>> now = JalaliDatetime(1394, 4, 31, 15, 38, 6, 37269)
>>> now.todate()
datetime.date(2015, 7, 22)
>>> now.todatetime()
datetime.datetime(2015, 7, 22, 15, 38, 6, 37269)
>>> JalaliDatetime(datetime(2015, 7, 22, 14, 47, 9, 821830))
khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, Chaharshanbeh)
>>> JalaliDatetime(datetime(2015, 7, 22, 14, 47, 9, 821830, TehranTimezone()))
khayyam.JalaliDatetime(1394, 4, 31, 14, 47, 9, 821830, tzinfo=+03:30 dst:60, Chaharshanbeh)
>>> JalaliDate(date(2015, 7, 22))
khayyam.JalaliDate(1394, 4, 31, Chaharshanbeh)
Arithmetics & Operators ^^^^^^^^^^^^^^^^^^^^^^^
>>> from datetime import timedelta
>>> from khayyam import JalaliDate, JalaliDatetime
>>> now = JalaliDatetime(1394, 4, 31, 16, 17, 31, 374398)
>>> now + timedelta(days=1)
khayyam.JalaliDatetime(1394, 5, 1, 16, 17, 31, 374398, Panjshanbeh)
>>> now + timedelta(seconds=3600)
khayyam.JalaliDatetime(1394, 4, 31, 17, 17, 31, 374398, Chaharshanbeh)
>>> now - timedelta(seconds=3600)
khayyam.JalaliDatetime(1394, 4, 31, 15, 17, 31, 374398, Chaharshanbeh)
>>> yesterday = now - timedelta(1)
>>> yesterday
khayyam.JalaliDatetime(1394, 4, 30, 16, 17, 31, 374398, Seshanbeh)
>>> now - yesterday
datetime.timedelta(1)
>>> JalaliDatetime.now() - now
datetime.timedelta(0, 478, 328833) # 478 seconds taken to writing this section
Comparison ^^^^^^^^^^
>>> now > yesterday
True
>>> now != yesterday
True
>>> now.todate() == yesterday.todate()
False
Change Log ^^^^^^^^^^
-
3.0.15:
- BUGFIX: Removing
from sphinx.util import inspect
from jalali_datetime.py.
- BUGFIX: Removing
-
3.0.11
- Allmost the all API's are documented.
-
3.0.10
- Imoprting JalaliDateFormatter & JalaliDatetimeFormatter in init.py
- Accept also callable in JalaliDatetime.init(tzinfo=...) for tzinfo argument.
- JalaliDatetime APIs, well documented.
-
3.0.9
- Removing pypy from travis, due the travis bug: buffer overflow !
-
3.0.0
- Raising TypeError instead of ValueError on overloaded operators, if the given type is mismatch.
- Fixing tests to pass on systems that configured as UTC.
- 100% Code coverage
- Moving all tests to khayyam/tests
- Removing some uncovered, obsolete code lines
-
2.11.0
- Using pure C instead of cython. Now the C extension is as fast as possible.
- Including OSX in travis.yaml for python 2 & 3
- Including pypy 2 & 3 tests in travis.yaml
-
2.10.0
- Add english weekday format directive
-
2.9.8
- Registering on travis-ci.org
- Registering on coveralls.io
- Registering on requires.io
-
2.9.7
- Fixing problem in setup.py in python3 #15
-
2.9.3
- setup.py for windows
-
2.9.1
- Release !
-
2.9.1b2
- encoding all repr functions
-
2.9.1b1 (2015-07-30)
- Fixing setup.py bug
-
2.9.1b0 (2015-07-30)
- Using any available C compiler if cython is not available.
- Using pure python if any error raised on installation with extension.
-
2.9.0b0 (2015-07-30)
- All algorithms reimplemented using cython and static typing, so the calculation with new C extension is very faster than python pure algorithm implementation.
- Fallback switch to pure python algorithm implementation, if compiled binaries not available.
- Test case(s) for algorithms(C & Python).
-
2.8.0b1 (2015-07-28)
-
Jalalidate.timetuple
method implemented from scratch including unit test. - Some methods with underscore renamed:
JalaliDate.*_ascii
toJalaliDate.*ascii
-
-
2.7.0b2 (2015-07-26)
- README.rst
-
2.7.0-beta (2015-07-25)
- some bug fixes.
- method
Jalalidate.fromdate
removed. use constructor instead:JalaliDate(date)
- method
Jalalidate.fromjulianday
removed. use constructor instead:JalaliDate(julian_days=..)
- method
Jalalidate.fromdatetime
removed. use constructor instead:JalaliDatetime(datetime)
-
2.6.0-beta (2015-07-25)
- All possible formatting directives(a-z, A-Z) are supported, except: T
- All format directives are tested.
- Formatting and parsing test cases moved to
khayyam.formatting.tests
package. - In project: docs/html
-
JalaliDate.from_julian_days
renamed toJalaliDate.fromjuliandays
-
JalaliDate.from_julian_days
renamed toJalaliDate.fromjuliandays
-
JalaliDate.days_in_month
renamed toJalaliDate.daysinmonth
-
JalaliDate.is_leap
renamed toJalaliDate.isleap
-
JalaliDatetime
Modern properties. - README.md updated
-
2.5.0-beta (2015-07-23)
- Doc: doctest
- Doc: formatting and parsing directives table.
- Doc: adding examples of new formatting directives in introduction: %D, %J, %R, %N, %n, %F, %h, %i, %r, %s, %o.
- local date & time formats are changed: digits -> persian
- Formatting and parsing test cases has been separated
-
2.4.0-beta (2015-07-22)
- Persian Numbers
- %D, %J, %R, %N, %n, %F, %h, %i, %r, %s, %o directives has been added.
-
2.3.0-alpha (2015-07-22)
- Constants are moved to formatting packages except MINYEAR, MAXYEAR ans weekdays.
- Doc: Introduction -> Formatting & parsing
- Doc: Introduction -> Converting
- New methods
jalaliDate.todate
,jalaliDate.fromdate
,jalaliDatetime.todatetime
andjalaliDatetime.fromdatetime
- Removed methods
jalaliDate.to_date
,jalaliDate.from_date
,jalaliDatetime.to_datetime
andjalaliDatetime.fromdate_time
-
2.2.1-alpha (2015-07-21)
- Doc: Reading package's version automatically from khayyam/init.py in
sphinx/conf.py
- Doc: Installation: (PYPI, Development version)
- Doc: Testing
- Doc: Contribution
- Doc: Reading package's version automatically from khayyam/init.py in
-
2.2.0-alpha (2015-07-21)
- Generating API Documentation
-
2.1.0-alpha (2015-07-20)
- Adding ascii weekdayname in
JalaliDatetime
andJalaliDate
representation(repr).
- Adding ascii weekdayname in
-
2.0.0-alpha (2015-07-19) Incompatible with < 2.0.0
- JalaliDate: method
localformat
renamed tolocaldateformat
. - JalaliDatetime: method
localformat
renamed tolocaldatetimeformat
. - JalaliDatetime: method
localshortformat_ascii
renamed tolocalshortformatascii
. - JalaliDatetime: method
localdatetimeformat_ascii
renamed tolocaldatetimeformatascii
. - JalaliDatetime: method
ampm_ascii
renamed toampmascii
. - JalaliDatetime: Migrating to New Formatter/Parser Engine
- TehTz: renamed to TehranTimezone
- Comparison and Timezones
- Comparison with
datetime.date
&datetime.datetime
- Fixing timezone bug
- JalaliDate: method
-
1.1.0 (2015-07-17)
- JalaliDate: New Formatter/Parser & full unittests.