day()#
#day(date: date|datetime|Producer, tz: str|Producer = "UTC") -> Expression
Extracts the day component from a date or UTC datetime value.
If tz
is specified, then date
is converted from UTC to the specified timezone before extracting the day.
tz
is ignored if date
is a Python date
or datetime
object.
If any of the arguments are Producer
objects, then day()
also acts as a filter and removes invalid values from the producer.
Must be called in a rule or query context.
Parameters#
Name | Type | Description |
---|---|---|
date | Producer or Python date or datetime object | The date or datetime value from which to extract the day. |
tz | Producer or Python str object | Optional timezone string (e.g., "America/New_York" ), offset string (e.g., "+0600" ), or Python tzinfo object. Refer to the timezone database for a list of valid timezone identifiers. Ignored if date is a Python date or datetime object. (Default: "UTC" ). |
Returns#
An Expression
object.
Raises#
TypeError
if the date
parameter is not a Producer
object or Python date
or datetime
object.
Example#
Use day()
to extract the day component from date and datetime values:
#import relationalai as rai
from relationalai.std import alias, dates
# =====
# SETUP
# =====
model = rai.Model("MyModel")
Event = model.Type("Event")
with model.rule():
Event.add(id=1).set(time=dates.datetime(2021, 1, 1, 1, 30))
Event.add(id=2).set(time="invalid")
# =======
# EXAMPLE
# =======
with model.rule():
event = Event()
# day() filters out any events with invalid time values, so the
# following only sets the day property for Event 1.
event.set(day=dates.day(event.time))
# Since Event 2 is filtered out above, the following only sets the
# has_valid_time property for Event 1.
event.set(has_valid_time=True)
with model.query() as select:
event = Event()
response = select(event.id, event.time, event.day, event.has_valid_time)
print(response.results)
# id time month has_valid_time
# 0 1 2021-01-01 01:30:00 1.0 True
# 1 2 invalid NaN NaN
If the date
parameter is a datetime and the tz
parameter is specified, the datetime is converted from UTC to the specified timezone before computing the weekday:
#with model.query() as select:
event = Event()
day1 = dates.day(event.time, tz="America/New_York")
day2 = dates.day(event.time, tz="+0600")
response = select(event.id, event.time, alias(day1, "day1"), alias(day2, "day2"))
print(response.results)
#
with model.query() as select:
event = Event()
month1 = dates.month(event.time, tz="America/New_York")
month2 = dates.month(event.time, tz="+0600")
response = select(event.id, event.time, alias(month1, "month1"), alias(month2, "month2"))
print(response.results)
# id time month1 month2
# 0 1 2021-01-01 01:30:00 12 1