persiantools 4.0.0__tar.gz → 4.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. {persiantools-4.0.0/persiantools.egg-info → persiantools-4.0.3}/PKG-INFO +1 -1
  2. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools/__init__.py +1 -1
  3. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools/jdatetime.py +25 -33
  4. {persiantools-4.0.0 → persiantools-4.0.3/persiantools.egg-info}/PKG-INFO +1 -1
  5. {persiantools-4.0.0 → persiantools-4.0.3}/tests/test_jalalidate.py +59 -2
  6. {persiantools-4.0.0 → persiantools-4.0.3}/tests/test_jalalidatetime.py +4 -0
  7. {persiantools-4.0.0 → persiantools-4.0.3}/LICENSE +0 -0
  8. {persiantools-4.0.0 → persiantools-4.0.3}/MANIFEST.in +0 -0
  9. {persiantools-4.0.0 → persiantools-4.0.3}/README.md +0 -0
  10. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools/characters.py +0 -0
  11. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools/digits.py +0 -0
  12. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools/utils.py +0 -0
  13. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools.egg-info/SOURCES.txt +0 -0
  14. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools.egg-info/dependency_links.txt +0 -0
  15. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools.egg-info/not-zip-safe +0 -0
  16. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools.egg-info/requires.txt +0 -0
  17. {persiantools-4.0.0 → persiantools-4.0.3}/persiantools.egg-info/top_level.txt +0 -0
  18. {persiantools-4.0.0 → persiantools-4.0.3}/pyproject.toml +0 -0
  19. {persiantools-4.0.0 → persiantools-4.0.3}/setup.cfg +0 -0
  20. {persiantools-4.0.0 → persiantools-4.0.3}/setup.py +0 -0
  21. {persiantools-4.0.0 → persiantools-4.0.3}/tests/test_characters.py +0 -0
  22. {persiantools-4.0.0 → persiantools-4.0.3}/tests/test_digits.py +0 -0
  23. {persiantools-4.0.0 → persiantools-4.0.3}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: persiantools
3
- Version: 4.0.0
3
+ Version: 4.0.3
4
4
  Summary: Jalali date and datetime with other tools
5
5
  Home-page: https://github.com/majiidd/persiantools
6
6
  Author: Majid Hajiloo
@@ -7,7 +7,7 @@
7
7
 
8
8
  __title__ = "persiantools"
9
9
  __url__ = "https://github.com/majiidd/persiantools"
10
- __version__ = "4.0.0"
10
+ __version__ = "4.0.3"
11
11
  __build__ = __version__
12
12
  __author__ = "Majid Hajiloo"
13
13
  __author_email__ = "majid.hajiloo@gmail.com"
@@ -247,9 +247,10 @@ class JalaliDate:
247
247
  days %= 12053
248
248
  jalali_year += 4 * (days // 1461)
249
249
  days %= 1461
250
- jalali_year += (days - 1) // 365
251
250
 
251
+ # Correct for the leap year case
252
252
  if days > 365:
253
+ jalali_year += (days - 1) // 365
253
254
  days = (days - 1) % 365
254
255
 
255
256
  # Determine the Jalali month and day
@@ -265,63 +266,54 @@ class JalaliDate:
265
266
 
266
267
  def to_gregorian(self):
267
268
  """based on jdf.scr.ir"""
269
+ year = self.year + 1595
268
270
  month = self.month
269
271
  day = self.day
270
- year = self.year
271
272
 
272
- # Determine the Gregorian year
273
- gregorian_year = 621 if year <= 979 else 1600
274
- year -= 0 if year <= 979 else 979
275
-
276
- # Calculate the number of days
277
- days_in_month = (month - 1) * 31 if month < 7 else ((month - 7) * 30) + 186
278
- days = (365 * year) + (year // 33) * 8 + ((year % 33) + 3) // 4
279
- days += 78 + day + days_in_month
273
+ # Calculate the total number of days
274
+ days = -355668 + (365 * year) + ((year // 33) * 8) + (((year % 33) + 3) // 4) + day
275
+ if month < 7:
276
+ days += (month - 1) * 31
277
+ else:
278
+ days += ((month - 7) * 30) + 186
280
279
 
281
- gregorian_year += 400 * (days // 146097)
280
+ # Determine the Gregorian year
281
+ gregorian_year = 400 * (days // 146097)
282
282
  days %= 146097
283
283
 
284
284
  if days > 36524:
285
285
  days -= 1
286
286
  gregorian_year += 100 * (days // 36524)
287
287
  days %= 36524
288
-
289
288
  if days >= 365:
290
289
  days += 1
291
290
 
292
291
  gregorian_year += 4 * (days // 1461)
293
292
  days %= 1461
294
- gregorian_year += (days - 1) // 365
295
-
296
293
  if days > 365:
294
+ gregorian_year += (days - 1) // 365
297
295
  days = (days - 1) % 365
298
296
 
299
297
  gregorian_day = days + 1
300
298
 
299
+ # Handle leap years for February day count adjustment
300
+ if (gregorian_year % 4 == 0 and gregorian_year % 100 != 0) or (gregorian_year % 400 == 0):
301
+ feb_days = 29
302
+ else:
303
+ feb_days = 28
304
+
301
305
  # Days in each month of the Gregorian calendar
302
- gregorian_days_in_month = [
303
- 0,
304
- 31,
305
- 29 if (gregorian_year % 4 == 0 and gregorian_year % 100 != 0) or gregorian_year % 400 == 0 else 28,
306
- 31,
307
- 30,
308
- 31,
309
- 30,
310
- 31,
311
- 31,
312
- 30,
313
- 31,
314
- 30,
315
- 31,
316
- ]
306
+ gregorian_days_in_month = [0, 31, feb_days, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
317
307
 
318
308
  # Determine the Gregorian month
319
- for _gregorian_month, g in enumerate(gregorian_days_in_month):
320
- if gregorian_day <= g:
309
+ gregorian_month = 1
310
+ for days_in_month in gregorian_days_in_month[1:]:
311
+ if gregorian_day <= days_in_month:
321
312
  break
322
- gregorian_day -= g
313
+ gregorian_day -= days_in_month
314
+ gregorian_month += 1
323
315
 
324
- return date(gregorian_year, _gregorian_month, gregorian_day)
316
+ return date(gregorian_year, gregorian_month, gregorian_day)
325
317
 
326
318
  @classmethod
327
319
  def today(cls):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: persiantools
3
- Version: 4.0.0
3
+ Version: 4.0.3
4
4
  Summary: Jalali date and datetime with other tools
5
5
  Home-page: https://github.com/majiidd/persiantools
6
6
  Author: Majid Hajiloo
@@ -14,8 +14,6 @@ class TestJalaliDate(TestCase):
14
14
  self.assertEqual(JalaliDate(1367, 2, 14).to_gregorian(), date(1988, 5, 4))
15
15
  self.assertEqual(JalaliDate(1395, 3, 21).to_gregorian(), date(2016, 6, 10))
16
16
  self.assertEqual(JalaliDate(1395, 12, 9).to_gregorian(), date(2017, 2, 27))
17
- self.assertEqual(JalaliDate(1395, 12, 30).to_gregorian(), date(2017, 3, 20))
18
- self.assertEqual(JalaliDate(1396, 1, 1).to_gregorian(), date(2017, 3, 21))
19
17
  self.assertEqual(JalaliDate(1400, 6, 31).to_gregorian(), date(2021, 9, 22))
20
18
  self.assertEqual(JalaliDate(1396, 7, 27).to_gregorian(), date(2017, 10, 19))
21
19
  self.assertEqual(JalaliDate(1397, 11, 29).to_gregorian(), date(2019, 2, 18))
@@ -23,6 +21,32 @@ class TestJalaliDate(TestCase):
23
21
  self.assertEqual(JalaliDate(1400, 4, 25).to_gregorian(), date(2021, 7, 16))
24
22
  self.assertEqual(JalaliDate(1400, 12, 20).to_gregorian(), date(2022, 3, 11))
25
23
  self.assertEqual(JalaliDate(1403, 1, 5).to_gregorian(), date(2024, 3, 24))
24
+ self.assertEqual(JalaliDate(1402, 10, 10).to_gregorian(), date(2023, 12, 31))
25
+ self.assertEqual(JalaliDate(1403, 10, 11).to_gregorian(), date(2024, 12, 31))
26
+ self.assertEqual(JalaliDate(1403, 2, 23).to_gregorian(), date(2024, 5, 12))
27
+ self.assertEqual(JalaliDate(1403, 4, 3).to_gregorian(), date(2024, 6, 23))
28
+
29
+ self.assertEqual(JalaliDate(1391, 12, 30).to_gregorian(), date(2013, 3, 20))
30
+ self.assertEqual(JalaliDate(1395, 12, 30).to_gregorian(), date(2017, 3, 20))
31
+ self.assertEqual(JalaliDate(1399, 12, 30).to_gregorian(), date(2021, 3, 20))
32
+ self.assertEqual(JalaliDate(1403, 12, 30).to_gregorian(), date(2025, 3, 20))
33
+
34
+ self.assertEqual(JalaliDate(1378, 10, 11).to_gregorian(), date(2000, 1, 1))
35
+ self.assertEqual(JalaliDate(1379, 10, 12).to_gregorian(), date(2001, 1, 1))
36
+ self.assertEqual(JalaliDate(1390, 10, 11).to_gregorian(), date(2012, 1, 1))
37
+ self.assertEqual(JalaliDate(1393, 10, 11).to_gregorian(), date(2015, 1, 1))
38
+ self.assertEqual(JalaliDate(1398, 10, 11).to_gregorian(), date(2020, 1, 1))
39
+ self.assertEqual(JalaliDate(1399, 10, 12).to_gregorian(), date(2021, 1, 1))
40
+ self.assertEqual(JalaliDate(1402, 10, 11).to_gregorian(), date(2024, 1, 1))
41
+ self.assertEqual(JalaliDate(1403, 10, 12).to_gregorian(), date(2025, 1, 1))
42
+
43
+ self.assertEqual(JalaliDate(1367, 1, 1).to_gregorian(), date(1988, 3, 21))
44
+ self.assertEqual(JalaliDate(1396, 1, 1).to_gregorian(), date(2017, 3, 21))
45
+ self.assertEqual(JalaliDate(1399, 1, 1).to_gregorian(), date(2020, 3, 20))
46
+ self.assertEqual(JalaliDate(1400, 1, 1).to_gregorian(), date(2021, 3, 21))
47
+ self.assertEqual(JalaliDate(1402, 1, 1).to_gregorian(), date(2023, 3, 21))
48
+ self.assertEqual(JalaliDate(1403, 1, 1).to_gregorian(), date(2024, 3, 20))
49
+ self.assertEqual(JalaliDate(1404, 1, 1).to_gregorian(), date(2025, 3, 21))
26
50
 
27
51
  self.assertEqual(JalaliDate.today().to_gregorian(), date.today())
28
52
 
@@ -33,6 +57,11 @@ class TestJalaliDate(TestCase):
33
57
  self.assertEqual(JalaliDate(date(2000, 1, 1)), JalaliDate(1378, 10, 11))
34
58
  self.assertEqual(JalaliDate(date(2017, 10, 19)), JalaliDate(1396, 7, 27))
35
59
  self.assertEqual(JalaliDate(date(2019, 2, 18)), JalaliDate(1397, 11, 29))
60
+ self.assertEqual(JalaliDate(date(2020, 3, 20)), JalaliDate(1399, 1, 1))
61
+ self.assertEqual(JalaliDate(date(2021, 3, 21)), JalaliDate(1400, 1, 1))
62
+ self.assertEqual(JalaliDate(date(2023, 3, 21)), JalaliDate(1402, 1, 1))
63
+ self.assertEqual(JalaliDate(date(2025, 1, 1)), JalaliDate(1403, 10, 12))
64
+
36
65
  self.assertEqual(JalaliDate.to_jalali(1990, 9, 23), JalaliDate(1369, 7, 1))
37
66
  self.assertEqual(JalaliDate.to_jalali(1990, 9, 23), JalaliDate(1369, 7, 1))
38
67
  self.assertEqual(JalaliDate.to_jalali(2013, 9, 16), JalaliDate(1392, 6, 25))
@@ -40,6 +69,28 @@ class TestJalaliDate(TestCase):
40
69
  self.assertEqual(JalaliDate.to_jalali(2021, 2, 11), JalaliDate(1399, 11, 23))
41
70
  self.assertEqual(JalaliDate.to_jalali(2021, 7, 16), JalaliDate(1400, 4, 25))
42
71
  self.assertEqual(JalaliDate.to_jalali(2024, 3, 24), JalaliDate(1403, 1, 5))
72
+ self.assertEqual(JalaliDate.to_jalali(2020, 3, 19), JalaliDate(1398, 12, 29))
73
+ self.assertEqual(JalaliDate.to_jalali(2023, 12, 31), JalaliDate(1402, 10, 10))
74
+ self.assertEqual(JalaliDate.to_jalali(2024, 12, 31), JalaliDate(1403, 10, 11))
75
+ self.assertEqual(JalaliDate.to_jalali(2024, 5, 12), JalaliDate(1403, 2, 23))
76
+ self.assertEqual(JalaliDate.to_jalali(2024, 6, 23), JalaliDate(1403, 4, 3))
77
+
78
+ self.assertEqual(JalaliDate.to_jalali(2021, 3, 20), JalaliDate(1399, 12, 30))
79
+ self.assertEqual(JalaliDate.to_jalali(2025, 3, 20), JalaliDate(1403, 12, 30))
80
+
81
+ self.assertEqual(JalaliDate.to_jalali(2000, 1, 1), JalaliDate(1378, 10, 11))
82
+ self.assertEqual(JalaliDate.to_jalali(2012, 1, 1), JalaliDate(1390, 10, 11))
83
+ self.assertEqual(JalaliDate.to_jalali(2013, 1, 1), JalaliDate(1391, 10, 12))
84
+ self.assertEqual(JalaliDate.to_jalali(2020, 1, 1), JalaliDate(1398, 10, 11))
85
+ self.assertEqual(JalaliDate.to_jalali(2024, 1, 1), JalaliDate(1402, 10, 11))
86
+ self.assertEqual(JalaliDate.to_jalali(2025, 1, 1), JalaliDate(1403, 10, 12))
87
+
88
+ self.assertEqual(JalaliDate.to_jalali(1988, 3, 21), JalaliDate(1367, 1, 1))
89
+ self.assertEqual(JalaliDate.to_jalali(2019, 3, 21), JalaliDate(1398, 1, 1))
90
+ self.assertEqual(JalaliDate.to_jalali(2020, 3, 20), JalaliDate(1399, 1, 1))
91
+ self.assertEqual(JalaliDate.to_jalali(2021, 3, 21), JalaliDate(1400, 1, 1))
92
+ self.assertEqual(JalaliDate.to_jalali(2024, 3, 20), JalaliDate(1403, 1, 1))
93
+ self.assertEqual(JalaliDate.to_jalali(2025, 3, 21), JalaliDate(1404, 1, 1))
43
94
 
44
95
  self.assertEqual(JalaliDate(date.today()), JalaliDate.today())
45
96
 
@@ -58,6 +109,7 @@ class TestJalaliDate(TestCase):
58
109
  self.assertEqual(JalaliDate.check_date(1399, 11, 31), False)
59
110
  self.assertEqual(JalaliDate.check_date(1400, 4, 25), True)
60
111
  self.assertEqual(JalaliDate.check_date(1400, 12, 30), False)
112
+ self.assertEqual(JalaliDate.check_date(1403, 4, 3), True)
61
113
  self.assertEqual(JalaliDate.check_date(1403, 12, 30), True)
62
114
 
63
115
  def test_completeday(self):
@@ -228,6 +280,7 @@ class TestJalaliDate(TestCase):
228
280
  self.assertEqual(JalaliDate(1397, 11, 29).week_of_year(), 49)
229
281
  self.assertEqual(JalaliDate(1399, 1, 2).week_of_year(), 2)
230
282
  self.assertEqual(JalaliDate(1403, 1, 5).week_of_year(), 2)
283
+ self.assertEqual(JalaliDate(1403, 4, 3).week_of_year(), 15)
231
284
 
232
285
  self.assertEqual(JalaliDate(1367, 2, 14).weekday(), 4)
233
286
  self.assertEqual(JalaliDate(1393, 1, 1).weekday(), 6)
@@ -240,6 +293,7 @@ class TestJalaliDate(TestCase):
240
293
  self.assertEqual(JalaliDate(1397, 1, 1).weekday(), 4)
241
294
  self.assertEqual(JalaliDate(1397, 11, 29).weekday(), 2)
242
295
  self.assertEqual(JalaliDate(1400, 1, 1).weekday(), 1)
296
+ self.assertEqual(JalaliDate(1403, 4, 3).isoweekday(), 2)
243
297
  self.assertEqual(JalaliDate(1400, 1, 1).isoweekday(), 2)
244
298
  self.assertEqual(JalaliDate(1396, 7, 27).isoweekday(), 6)
245
299
  self.assertEqual(JalaliDate(1397, 11, 29).isoweekday(), 3)
@@ -260,6 +314,8 @@ class TestJalaliDate(TestCase):
260
314
  self.assertTrue(JalaliDate(1367, 2, 14) <= date(1988, 5, 4))
261
315
  self.assertFalse(JalaliDate(1367, 2, 14) >= JalaliDate(1369, 1, 1))
262
316
  self.assertTrue(JalaliDate(1397, 11, 29) >= JalaliDate(1397, 11, 10))
317
+ self.assertTrue(JalaliDate(1403, 12, 30) > JalaliDate(1403, 12, 29))
318
+ self.assertTrue(JalaliDate(1404, 1, 1) > JalaliDate(1403, 12, 30))
263
319
 
264
320
  self.assertEqual(JalaliDate(1395, 3, 21) + timedelta(days=2), JalaliDate(1395, 3, 23))
265
321
  self.assertEqual(JalaliDate(1396, 7, 27) + timedelta(days=4), JalaliDate(1396, 8, 1))
@@ -271,6 +327,7 @@ class TestJalaliDate(TestCase):
271
327
  self.assertEqual(JalaliDate(1395, 3, 21) - date(2016, 5, 3), timedelta(days=38))
272
328
  self.assertEqual(JalaliDate(1395, 12, 30) - JalaliDate(1395, 1, 1), timedelta(days=365))
273
329
  self.assertEqual(JalaliDate(1403, 1, 1) - JalaliDate(1402, 12, 29), timedelta(days=1))
330
+ self.assertEqual(JalaliDate(1404, 1, 1) - JalaliDate(1403, 12, 29), timedelta(days=2))
274
331
 
275
332
  self.assertFalse(JalaliDate(1367, 2, 14) == (1367, 2, 14))
276
333
  self.assertFalse(JalaliDate(1367, 2, 14) == "")
@@ -22,6 +22,10 @@ class TestJalaliDateTime(TestCase):
22
22
  JalaliDateTime(1399, 11, 23, 13, 12, 0, 0).to_gregorian(),
23
23
  datetime(2021, 2, 11, 13, 12, 0, 0),
24
24
  )
25
+ self.assertEqual(
26
+ JalaliDateTime(1404, 1, 1, 13, 12, 0, 0).to_gregorian(),
27
+ datetime(2025, 3, 21, 13, 12, 0, 0),
28
+ )
25
29
 
26
30
  def test_gregorian_to_shamsi(self):
27
31
  self.assertEqual(
File without changes
File without changes
File without changes
File without changes
File without changes