persiantools


Namepersiantools JSON
Version 4.0.0 PyPI version JSON
download
home_pagehttps://github.com/majiidd/persiantools
SummaryJalali date and datetime with other tools
upload_time2024-03-24 15:58:22
maintainerNone
docs_urlNone
authorMajid Hajiloo
requires_python>=3.8
licenseMIT
keywords jalali shamsi persian digits characters converter jalalidate jalalidatetime date datetime jdate jdatetime farsi
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PersianTools

[![PyPI](https://img.shields.io/pypi/v/persiantools.svg)](https://pypi.org/project/persiantools/)
![test workflow](https://github.com/majiidd/persiantools/actions/workflows/ci.yml/badge.svg)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/majiidd/persiantools/master.svg)](https://results.pre-commit.ci/latest/github/majiidd/persiantools/master)
[![codecov](https://codecov.io/gh/majiidd/persiantools/branch/master/graph/badge.svg?token=Q990VL6FGW)](https://codecov.io/gh/majiidd/persiantools)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/persiantools.svg)](https://pypi.org/project/persiantools/)
[![PyPI - License](https://img.shields.io/pypi/l/persiantools.svg)](https://pypi.org/project/persiantools/)

Provides Jalali (also known as Shamsi or Persian) dates and datetimes functionalities, among other tools.
- It converts between Jalali and Gregorian dates and datetimes (based on python datetime's module).
- It supports operators like `+`, `-`, `==`, and `>=`.
- It includes timezone support.
- It converts between Arabic and Persian characters/digits.
- It turns numbers into Persian words.

## Install Package
You can install the package using pip with the following command:
```bash
python -m pip install persiantools
```
Persiantools supports Python 3.8+. (_for python 2.7 and 3.5 use [1.5.x](https://github.com/majiidd/persiantools/tree/1.5.x) version_)

## How to use

### Date

```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

```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=<DstTzInfo 'Asia/Tehran' +0330+3:30:00 STD>)

>>> JalaliDateTime.now(pytz.utc)
JalaliDateTime(1395, 4, 17, 21, 23, 53, 474618, tzinfo=<UTC>)
```

### Format

Based on python `strftime()` behavior

```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'
```

### Digits/Characters Tools

```python
>>> from persiantools import characters, digits

>>> digits.en_to_fa("0987654321")
'۰۹۸۷۶۵۴۳۲۱'

>>> digits.ar_to_fa("٠٩٨٧٦٥٤٣٢١")
'۰۹۸۷۶۵۴۳۲۱'

>>> digits.fa_to_en("۰۹۸۷۶۵۴۳۲۱")
'0987654321'

>>> digits.to_word(9512026)
'نه میلیون و پانصد و دوازده هزار و بیست و شش'

>>> digits.to_word(15.007)
'پانزده و هفت هزارم'

>>> characters.ar_to_fa("كيك")
'کیک'
```

### Operators
The package supports various operators for date and time manipulations. Here are some examples:
```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(1368, 2, 14, 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

```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)
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/majiidd/persiantools",
    "name": "persiantools",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "jalali shamsi persian digits characters converter jalalidate jalalidatetime date datetime jdate jdatetime farsi",
    "author": "Majid Hajiloo",
    "author_email": "majid.hajiloo@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/de/7d/4a500497eb83f72e93c4c7a674aa0a0b4f435363c450ee957e9c1895f23e/persiantools-4.0.0.tar.gz",
    "platform": null,
    "description": "# PersianTools\n\n[![PyPI](https://img.shields.io/pypi/v/persiantools.svg)](https://pypi.org/project/persiantools/)\n![test workflow](https://github.com/majiidd/persiantools/actions/workflows/ci.yml/badge.svg)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/majiidd/persiantools/master.svg)](https://results.pre-commit.ci/latest/github/majiidd/persiantools/master)\n[![codecov](https://codecov.io/gh/majiidd/persiantools/branch/master/graph/badge.svg?token=Q990VL6FGW)](https://codecov.io/gh/majiidd/persiantools)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/persiantools.svg)](https://pypi.org/project/persiantools/)\n[![PyPI - License](https://img.shields.io/pypi/l/persiantools.svg)](https://pypi.org/project/persiantools/)\n\nProvides Jalali (also known as Shamsi or Persian) dates and datetimes functionalities, among other tools.\n- It converts between Jalali and Gregorian dates and datetimes (based on python datetime's module).\n- It supports operators like `+`, `-`, `==`, and `>=`.\n- It includes timezone support.\n- It converts between Arabic and Persian characters/digits.\n- It turns numbers into Persian words.\n\n## Install Package\nYou can install the package using pip with the following command:\n```bash\npython -m pip install persiantools\n```\nPersiantools supports Python 3.8+. (_for python 2.7 and 3.5 use [1.5.x](https://github.com/majiidd/persiantools/tree/1.5.x) version_)\n\n## How to use\n\n### Date\n\n```python\n>>> from persiantools.jdatetime import JalaliDate\n>>> import datetime\n\n>>> JalaliDate.today()\nJalaliDate(1395, 4, 18, Jomeh)\n\n>>> JalaliDate(1369, 7, 1)\nJalaliDate(1369, 7, 1, Yekshanbeh)\n\n>>> JalaliDate(datetime.date(1990, 9, 23))      # Gregorian to Jalali\nJalaliDate(1369, 7, 1, Yekshanbeh)\n\n>>> JalaliDate.to_jalali(2013, 9, 16)           # Gregorian to Jalali\nJalaliDate(1392, 6, 25, Doshanbeh)\n\n>>> JalaliDate(1392, 6, 25).to_gregorian()      # Jalali to Gregorian\ndatetime.date(2013, 9, 16)\n\n>>> JalaliDate.fromtimestamp(578707200)         # Timestamp to Jalali\nJalaliDate(1367, 2, 14, Chaharshanbeh)\n```\n\n### Datetime\n\n```python\n>>> from persiantools.jdatetime import JalaliDateTime\n>>> import datetime, pytz\n\n>>> JalaliDateTime.now()\nJalaliDateTime(1395, 4, 18, 1, 43, 24, 720505)\n\n>>> JalaliDateTime.now().to_gregorian()                                     # Jalali to Gregorian\ndatetime.datetime(2016, 7, 8, 1, 43, 24, 720505)\n\n>>> JalaliDateTime.to_jalali(datetime.datetime(1988, 5, 4, 14, 0, 0, 0))    # Gregorian to Jalali\nJalaliDateTime(1367, 2, 14, 14, 0)\n\n>>> JalaliDateTime.fromtimestamp(578723400, pytz.timezone(\"Asia/Tehran\"))   # Timestamp to Jalali\nJalaliDateTime(1367, 2, 14, 8, 0, tzinfo=<DstTzInfo 'Asia/Tehran' +0330+3:30:00 STD>)\n\n>>> JalaliDateTime.now(pytz.utc)\nJalaliDateTime(1395, 4, 17, 21, 23, 53, 474618, tzinfo=<UTC>)\n```\n\n### Format\n\nBased on python `strftime()` behavior\n\n```python\n>>> from persiantools.jdatetime import JalaliDate, JalaliDateTime\n>>> import pytz\n\n>>> JalaliDate(1367, 2, 14).isoformat()\n'1367-02-14'\n\n>>> JalaliDate(1395, 3, 1).strftime(\"%Y/%m/%d\")\n'1395/03/01'\n\n>>> JalaliDateTime(1369, 7, 1, 14, 0, 10, 0, pytz.utc).strftime(\"%c\")\n'Yekshanbeh 01 Mehr 1369 14:00:10'\n\n>>> JalaliDateTime.now(pytz.utc).strftime(\"%I:%M:%S.%f %p %z %Z\")\n'01:49:22.518523 PM +0000 UTC'\n```\n\n### Digits/Characters Tools\n\n```python\n>>> from persiantools import characters, digits\n\n>>> digits.en_to_fa(\"0987654321\")\n'\u06f0\u06f9\u06f8\u06f7\u06f6\u06f5\u06f4\u06f3\u06f2\u06f1'\n\n>>> digits.ar_to_fa(\"\u0660\u0669\u0668\u0667\u0666\u0665\u0664\u0663\u0662\u0661\")\n'\u06f0\u06f9\u06f8\u06f7\u06f6\u06f5\u06f4\u06f3\u06f2\u06f1'\n\n>>> digits.fa_to_en(\"\u06f0\u06f9\u06f8\u06f7\u06f6\u06f5\u06f4\u06f3\u06f2\u06f1\")\n'0987654321'\n\n>>> digits.to_word(9512026)\n'\u0646\u0647 \u0645\u06cc\u0644\u06cc\u0648\u0646 \u0648 \u067e\u0627\u0646\u0635\u062f \u0648 \u062f\u0648\u0627\u0632\u062f\u0647 \u0647\u0632\u0627\u0631 \u0648 \u0628\u06cc\u0633\u062a \u0648 \u0634\u0634'\n\n>>> digits.to_word(15.007)\n'\u067e\u0627\u0646\u0632\u062f\u0647 \u0648 \u0647\u0641\u062a \u0647\u0632\u0627\u0631\u0645'\n\n>>> characters.ar_to_fa(\"\u0643\u064a\u0643\")\n'\u06a9\u06cc\u06a9'\n```\n\n### Operators\nThe package supports various operators for date and time manipulations. Here are some examples:\n```python\n>>> from persiantools.jdatetime import JalaliDate, JalaliDateTime\n>>> import datetime\n\n>>> JalaliDate(1367, 2, 14) == JalaliDate(datetime.date(1988, 5, 4))\nTrue\n\n>>> JalaliDateTime(1367, 2, 14, 4, 30) >= JalaliDateTime(1368, 2, 14, 1, 0)\nFalse\n\n>>> JalaliDate(1367, 2, 14) == datetime.date(1988, 5, 4)\nTrue\n\n>>> JalaliDate(1395, 2, 14) + datetime.timedelta(days=38)\nJalaliDate(1395, 3, 21, Jomeh)\n\n>>> JalaliDateTime(1395, 12, 30) - JalaliDateTime(1395, 1, 1)\ndatetime.timedelta(365)\n```\n\n### Serializing and de-serializing\n\n```python\n>>> from persiantools.jdatetime import JalaliDate\n>>> import pickle\n\n>>> # Serializing\n>>> file = open(\"save.p\", \"wb\")\n>>> pickle.dump(JalaliDate(1367, 2, 14), file)\n>>> file.close()\n\n>>> # de-serializing\n>>> file = open(\"save.p\", \"rb\")\n>>> jalali = pickle.load(file)\n>>> file.close()\n>>> jalali\nJalaliDate(1367, 2, 14, Chaharshanbeh)\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Jalali date and datetime with other tools",
    "version": "4.0.0",
    "project_urls": {
        "Homepage": "https://github.com/majiidd/persiantools"
    },
    "split_keywords": [
        "jalali",
        "shamsi",
        "persian",
        "digits",
        "characters",
        "converter",
        "jalalidate",
        "jalalidatetime",
        "date",
        "datetime",
        "jdate",
        "jdatetime",
        "farsi"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "44459339909b5ead81f087888db7a65126538e032f158a34b5260ad99f1c7bca",
                "md5": "92ad06710a9a3cd606feac460cde1528",
                "sha256": "24c1ef540aa738987731aa5f0e8753486bffed3fa2dc6d4a1bcb7f6e5435b1aa"
            },
            "downloads": -1,
            "filename": "persiantools-4.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "92ad06710a9a3cd606feac460cde1528",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 15709,
            "upload_time": "2024-03-24T15:58:20",
            "upload_time_iso_8601": "2024-03-24T15:58:20.643270Z",
            "url": "https://files.pythonhosted.org/packages/44/45/9339909b5ead81f087888db7a65126538e032f158a34b5260ad99f1c7bca/persiantools-4.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "de7d4a500497eb83f72e93c4c7a674aa0a0b4f435363c450ee957e9c1895f23e",
                "md5": "8ee5fe57e89024772339d925e580abe2",
                "sha256": "c6569cebd72451a59bdf2c6e39263a40cd826e00ecfcd60593b4ad736c90e650"
            },
            "downloads": -1,
            "filename": "persiantools-4.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "8ee5fe57e89024772339d925e580abe2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 22541,
            "upload_time": "2024-03-24T15:58:22",
            "upload_time_iso_8601": "2024-03-24T15:58:22.446738Z",
            "url": "https://files.pythonhosted.org/packages/de/7d/4a500497eb83f72e93c4c7a674aa0a0b4f435363c450ee957e9c1895f23e/persiantools-4.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-24 15:58:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "majiidd",
    "github_project": "persiantools",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "persiantools"
}
        
Elapsed time: 0.21593s