62 lines
2.2 KiB
Racket
62 lines
2.2 KiB
Racket
#lang scribble/manual
|
|
|
|
@(require
|
|
scribble/example
|
|
scribble/core
|
|
(for-label racket/base
|
|
racket/string
|
|
))
|
|
|
|
@title[#:tag "gregor-utils"]{
|
|
Some utility functions around gregor
|
|
}
|
|
|
|
See also @hyperlink["https://docs.racket-lang.org/gregor/index.html" "gregor module"].
|
|
|
|
@author[@author+email["Hans Dijkema" "hans@dijkewijk.nl"]]
|
|
|
|
@defmodule[gregor-utils]{This module provides some utility functions around the gregor date module}
|
|
|
|
@section{Utility functions}
|
|
|
|
@defproc[(date->moment [dt (or/c date? date*?)]) moment?]{
|
|
Converts a racket @racket{date} or @racket{date*} structure to a gregor @racket{moment}.
|
|
When it converts, it will assumes two kinds of dates.
|
|
|
|
@itemlist[
|
|
@item{The first being a standard racket date structure with a time zone offset.}
|
|
@item{The second for a date* structure, that will hold a named local timezone or 'UTC'.}
|
|
]
|
|
|
|
This function will check if the date* structure is UTC time or local timezone. If it is
|
|
local timezone, it will use the function @racket{(system-tzid)} of tzinfo to determine the
|
|
local timezone id, that can be used to create a new gregor @racket{moment}.
|
|
|
|
As date* will be either localtime or UTC, we're working with what we got. We can recognize UTC, but the
|
|
timezone name will be something OS specific, e.g. on a dutch windows system: "West-Europa (zomertijd)".
|
|
This is reported e.g. in the windows powershell command:
|
|
|
|
@#reader scribble/comment-reader
|
|
[racketblock
|
|
> get-timezone:
|
|
|
|
Id : W. Europe Standard Time
|
|
DisplayName : (UTC+01:00) Amsterdam, Berlijn, Bern, Rome, Stockholm, Wenen
|
|
StandardName : West-Europa (standaardtijd)
|
|
DaylightName : West-Europa (zomertijd)
|
|
BaseUtcOffset : 01:00:00
|
|
SupportsDaylightSavingTime : True
|
|
]
|
|
|
|
But, as the racket standard date functions only work with UTC and localtime, we can request the current timezone
|
|
tzinfo's @racket{(system-tzid)} for localtime and use UTC for univeral time.
|
|
}
|
|
|
|
@defproc[(moment->date [m moment?]) date*?]{
|
|
Converts a gregor @racket{moment} to a standard racket @racket{date*}.
|
|
}
|
|
|
|
@defproc[(racket-date? [d any/c?]) boolean?]{
|
|
Returns #t, if d is of racket's standard type @racket{date} or racket{date*}.
|
|
}
|