[Ur] Better date & time support in Ur/Web + PostgreSQL

Adam Chlipala adamc at csail.mit.edu
Tue Sep 8 15:45:45 EDT 2020


Thanks for sharing the description of your new functionality, at my 
request in a GitHub issue <https://github.com/urweb/urweb/issues/220>! 
It looks like there are no related strong opinions lurking on this 
mailing list.

I would definitely be up to seeing appropriate types built into the 
standard library (and compiler). Are there natural implementations for 
the other major open-source SQL engines, not just Postgres?

On 8/16/20 9:56 AM, Simon Van Casteren wrote:
>
> I've been building www.classy.school <http://www.classy.school> for 
> some time with Ur/Web now. It's an application for music schools and a 
> lot of it revolves around schedules: Who has lessons at what time, 
> which teacher, which room, etc etc.
>
> In Ur/Web's "standard library" there are 2 types to represent dates / 
> times:
>
>   * Basis.time (Corresponds to unix epoch milliseconds IIRC). Contains
>     both date and time
>   * Datetime.t (Corresponds to a C struct IIRC). A bit more structure
>     than Basis.time
>
> I don't work with these two types at all. I defined two other types:
>
>   * calendardate. This is actually a type synonym for Basis.time, but
>     only because it makes it possible to serialize this to sql values.
>     All operations on this type only change the date part, so year -
>     month - day. It contains no timezone info.
>   * clocktime: { Hour: int, Minute: int}. (I don't need seconds, but
>     it wouldn't hurt to add it as well). I have to serialize /
>     deserialize this whenever it goes into the DB, very annoying.
>
> I've found this to be a much easier representation to work with for my 
> domain. Example: When you enroll with a teacher for some private 
> lessons, you often do it for x (eg: 10) lessons on a certain weekday 
> on a certain time. This time I have in my datamodel as a clocktime. 
> The actual "timestamps" of every lesson are seperate. Another benefit: 
> Comparing calendardates is much easier than comparing Basis.time / 
> Datetime.t.
>
> Anyway, I've been thinking for some time to propose to upstream all of 
> this / some of this into the standard library, if there is any 
> interest for it. With that I'd also serialize them into the correct 
> PostgreSQL types (calendardate -> date, clocktime -> time without 
> timezone). Afterwards, I want to look into adding support for some SQL 
> operators on these, especially adding a clocktime to a date (which 
> then becomes a PostgreSQL timestamp without timezone, not sure yet how 
> to model this in the type system). Being able to do this in SQL would 
> be huge for my application.
>
> So long story short, I'd mainly like to know if adding this stuff to 
> the standard library would be welcomed. If not, I'll keep all this in 
> my personal repo and put the SQL stuff in my urweb fork, but I thought 
> I'd ask :).
>
> Simon
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20200908/3335976d/attachment.html>


More information about the Ur mailing list