Skip to content

Commit efc5790

Browse files
Inital
1 parent b528669 commit efc5790

File tree

5 files changed

+38
-1
lines changed

5 files changed

+38
-1
lines changed

Doc/library/datetime.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2421,6 +2421,10 @@ Class attributes:
24212421

24222422
The UTC time zone, ``timezone(timedelta(0))``.
24232423

2424+
.. attribute:: timezone.name
2425+
2426+
The name of the timezone if specified during creation. If no name is provided,
2427+
an empty string is returned.
24242428

24252429
.. index::
24262430
single: % (percent); datetime format

Lib/_pydatetime.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2486,6 +2486,13 @@ def tzname(self, dt):
24862486
raise TypeError("tzname() argument must be a datetime instance"
24872487
" or None")
24882488

2489+
@property
2490+
def name(self):
2491+
"""Return provided name otherwise empty string."""
2492+
if not self._name:
2493+
return ''
2494+
return self._name
2495+
24892496
def dst(self, dt):
24902497
if isinstance(dt, datetime) or dt is None:
24912498
return None

Lib/test/datetimetester.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,13 @@ def test_tzname(self):
348348
with self.assertRaises(TypeError): self.EST.tzname('')
349349
with self.assertRaises(TypeError): self.EST.tzname(5)
350350

351+
def test_name_property(self):
352+
tz_named = timezone(timedelta(hours=5), 'IST')
353+
self.assertEqual(tz_named.name, 'IST')
354+
355+
tz_unnamed = timezone(timedelta(hours=0))
356+
self.assertEqual(tz_unnamed.name, '')
357+
351358
def test_fromutc(self):
352359
with self.assertRaises(ValueError):
353360
timezone.utc.fromutc(self.DT)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Add ``name`` attribute to :class:`datetime.timezone` that returns the ``name``
2+
provided during creation else an empty string.

Modules/_datetimemodule.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4373,6 +4373,16 @@ timezone_tzname(PyObject *op, PyObject *dt)
43734373
return timezone_str(op);
43744374
}
43754375

4376+
static PyObject *
4377+
timezone_name(PyDateTime_TimeZone *self, void *closure)
4378+
{
4379+
if (self->name == NULL) {
4380+
return PyUnicode_FromString("");
4381+
}
4382+
Py_INCREF(self->name);
4383+
return self->name;
4384+
}
4385+
43764386
static PyObject *
43774387
timezone_utcoffset(PyObject *op, PyObject *dt)
43784388
{
@@ -4440,6 +4450,13 @@ static PyMethodDef timezone_methods[] = {
44404450
{NULL, NULL}
44414451
};
44424452

4453+
static PyGetSetDef timezone_getset[] = {
4454+
{"name", (getter)timezone_name, NULL,
4455+
PyDoc_STR("If name is specified when timezone is created, returns the name."), NULL},
4456+
{NULL}
4457+
};
4458+
4459+
44434460
static const char timezone_doc[] =
44444461
PyDoc_STR("Fixed offset from UTC implementation of tzinfo.");
44454462

@@ -4473,7 +4490,7 @@ static PyTypeObject PyDateTime_TimeZoneType = {
44734490
0, /* tp_iternext */
44744491
timezone_methods, /* tp_methods */
44754492
0, /* tp_members */
4476-
0, /* tp_getset */
4493+
timezone_getset, /* tp_getset */
44774494
0, /* tp_base; filled in PyInit__datetime */
44784495
0, /* tp_dict */
44794496
0, /* tp_descr_get */

0 commit comments

Comments
 (0)