On this page:
copy-date
time->date
time-utc?
time-tai?
time-duration?
leap-year?
days-in-month
date-valid?
date-day-of-the-week
date-week-day?
time->ago-string
seconds->ago-string
current-year
current-time-zone-offset
Version: 4.0.2.5

14 SRFI19 time utilities

 (require (planet untyped/unlib/time))

Utility procedures for use with SRFI 19 times and dates.

(copy-date

 

date

 

 

 

 

 

 [

#:nanosecond nanosecond

 

 

 

 

 

 

#:second second

 

 

 

 

 

 

#:minute minute

 

 

 

 

 

 

#:hour hour

 

 

 

 

 

 

#:day day

 

 

 

 

 

 

#:month month

 

 

 

 

 

 

#:year year

 

 

 

 

 

 

#:zone-offset zone-offset])

 

 

srfi:date?

  date : srfi:date?

  nanosecond : (U integer #f) = #f

  second : (U integer #f) = #f

  minute : (U integer #f) = #f

  hour : (U integer #f) = #f

  day : (U integer #f) = #f

  month : (U integer #f) = #f

  year : (U integer #f) = #f

  zone-offset : (U integer #f) = #f

Creates a copy of date, substituting non-#f arguments for the values of the relevant fields.

(time->date time)  srfi:date?

  time : (U time-tai? time-utc?)

Converts time to a date.

(time-utc? item)  boolean?

  item : any

Predicate that recognises SRFI-19 times of the time-utc type.

(time-tai? item)  boolean?

  item : any

Predicate that recognises SRFI-19 times of the time-tai type.

(time-duration? item)  boolean?

  item : any

Predicate that recognises SRFI-19 times of the time-duration type.

(leap-year? year)  boolean?

  year : integer?

Returns #t if year is a leap year.

(days-in-month month [year])  integer?

  month : integer?

  year : integer? = 2001

Returns the number of days in month in year. month is numbered from 1 to 12. year defaults to a non-leap year if omitted.

Examples:

  > (days-in-month 2)

  28

  > (days-in-month 2 2000)

  29

(date-valid? date)  boolean?

  date : srfi:date?

Returns #t if date is a valid date (its hour, day, month and so on are all in the correct ranges).

(date-day-of-the-week date)

  (U 'mon 'tue 'wed 'thu 'fri 'sat 'sun)

  date : date?

Returns a symbol representing the day of the week on date.

(date-week-day? date)  boolean?

  date : date?

Returns #t if date is a Monday, Tuesday, Wednesday or Friday.

(time->ago-string then [now])  string?

  then : (U time-tai time-utc)

  

now

 

:

 

(U time-tai time-utc)

 

 

 

=

 

(current-time (U time-tai time-utc))

Given the time of an event the past (and, optionally, another argument representing the current time), returns a textual description of the time passed since the event. Raises exn:fail:unlib if now is before then. See seconds->ago-string for examples.

(seconds->ago-string secs [now])  string?

  secs : integer?

  now : integer? = (current-seconds)

Like time->ago-string but then and now are integer values like those output by current-seconds.

Examples:

  > (seconds->ago-string (- (current-seconds) 45))

  "45 seconds ago"

  > (seconds->ago-string (- (current-seconds) (* 30 60)))

  "30 minutes ago"

  > (seconds->ago-string (- (current-seconds) (* 20 60 60)))

  "20 hours ago"

  > (seconds->ago-string (- (current-seconds) (* 25 60 60)))

  "yesterday"

  > (seconds->ago-string (- (current-seconds) (* 50 60 60)))

  "2 days ago"

(current-year)  integer?

Returns the current four digit year.

(current-time-zone-offset)  integer?

Returns the current local time-zone offset in seconds (taking into account DST when and where appropriate).