prql
prql copied to clipboard
Temporal types
This is continuation of discussion about type system RFC https://github.com/PRQL/prql/pull/1964#discussion_r1119803344
I've taken a look around, and I suggest PRQL to have following data types:
- instant / moment, rust, java.time, DateTimeOffset
- date, chrono, java.time, DateOnly
- time, chrono, java.time, TimeOnly
- datetime, chrono, java.time,
- datetime_tz, chrono, java.time,
- duration, rust, java.time, (has a fixed duration)
- period, java.time, (a "human language" period, where duration is necessarily fixed, because months have different number of days and because daylight-saving-time),
Additionally, we may need special type for time zones and offsets.
(PS: I don't think this is a priority right now, just filing the issue)
Why are instant or moment needed as separate data types instead of just being functions that create instances of the datetime data type?
I like date, time and datetime.
In .NET date is called DateOnly and time is called TimeOnly.
I think datetime_tz is what is called DateTimeOffset in .NET. Not sure which is the better name.
Are these primitive data types of complex data types (i.e. structs). Structs could have methods and properties on them. Example: datetime.hour or time.minute.
If these are complex data types, maybe they should be named pascal case as opposed to primitive data types which are lower case. Example Date, Time, and DateTime.
PHP have the DateTime class. Python have the datetime class. .NET also have the third-party NodaTime library.
I think it should be possible to add and subtract time. In .NET you can do DateTime.Now.AddHours(3).
FYI @aljazerzen and I discussed this on the dev call, we agreed it was potentially cool but required a bunch of infra (e.g. Enums) that we don't have yet. So we can push to the future.
I agree with most of these and just have two questions I think:
- Like @vanillajonathan asked, what's the difference between
instant/momentanddatetime? durationvsperiod: my understanding from the explanation given is thatdurationwould be a fixed number of seconds whereasperiodis a "human language" time period like a "month" say, correct? In SQL the termINTERVALis often used and that could map onto either of these I guess?
instant/momentdescribes a moment in time.datetimedescribes a date + time, for example2031-12-19 08:27, which is time-zone dependent and might describe a different instant if the daylight-saving-time changes in the next 8 years.- Correct, I updated the initial comment
So what is the difference between instant / moment and datetime_tz?
datetime_tz describes date, time and timezone and depends on the definition of timezone, which might change in the future, due to day-light-saving time. This should be used for setting for example a meeting time, where you want it to be at "9:00 AM CEST on some date", regardless of the changes to the timezone shifts. This type also supports things like "add one month", while instant does not.