dayofyear()#
#dayofyear(date: date|datetime|Producer, tz: str|Producer = "UTC") -> Expression
Computes the day of the year (1–366) 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 of the year.
tz
is ignored if date
is a Python date
or datetime
object.
If any of the arguments are Producer
objects, then dayofyear()
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 of the year. |
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 dayofyear()
to extract the day of the year 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()
# dayofyear() filters out any events with invalid time values, so the
# following only sets the dayofyear property for Event 1.
event.set(dayofyear=dates.dayofyear(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.dayofyear, event.has_valid_time)
print(response.results)
# id time dayofyear 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()
dayofyear1 = dates.dayofyear(event.time, tz="America/New_York")
dayofyear2 = dates.dayofyear(event.time, tz="+0600")
response = select(event.id, event.time, alias(dayofyear1, "dayofyear1"), alias(dayofyear2, "dayofyear2"))
print(response.results)
# id time dayofyear1 dayofyear2
# 0 1 2021-01-01 01:30:00 366 1