Dealing with "Precise" Dates
I already posted an article on (begining) playing with Dates on OCaml.
Preparing the Toplevel
As usual, we have to load and use several modules:
#use "topfind";; #require "calendar";;
Creating a Second
To create a second, the top reachable precision:
CalendarLib.Time.Second.from_int 5;;
Creating a Precise Date
To create a precise date, let's use the "make" function:
CalendarLib.Fcalendar.Precise.make 2011 08 12 05 32 (float_of_int (CalendarLib.Time.Second.from_int 5));; CalendarLib.Fcalendar.Precise.make 2011 08 12 05 32 5.;;
Create a Precise Period
When wanting to add 2 days to a date, we must use "The Date + 2 days Period". To create that "Period":
CalendarLib.Fcalendar.Precise.Period.make 2011 08 12 05 32 (float_of_int (CalendarLib.Time.Second.from_int 5));; CalendarLib.Fcalendar.Precise.Period.make 2011 08 12 05 32 5.;;
Make an operation (add)
Let's create a Date, and calculate the "two days later" Date:
let d2 = CalendarLib.Fcalendar.Precise.add (CalendarLib.Fcalendar.Precise.make 2011 08 12 05 32 (float_of_int (CalendarLib.Time.Second.from_int 5))) (CalendarLib.Fcalendar.Precise.Period.make 0 0 2 0 0 (float_of_int (CalendarLib.Time.Second.from_int 0))) ;; let d2 = CalendarLib.Fcalendar.Precise.add (CalendarLib.Fcalendar.Precise.make 2011 08 12 05 32 5.) (CalendarLib.Fcalendar.Precise.Period.make 0 0 2 0 0 0.) ;;Then display it:
CalendarLib.Printer.Precise_Fcalendar.to_string d2;;
If the Date was from a string
I mostly intend to take the Date from an external source: A "date" field from a SQLite3 database, which is formatted "2011-08-16 16:00:01". To use it:
let initiale = CalendarLib.Printer.Precise_Fcalendar.from_fstring "%F %T" "2011-08-16 16:00:01";;Then to add 2 days to it:
let initiale_2 = CalendarLib.Fcalendar.Precise.add initiale (CalendarLib.Fcalendar.Precise.Period.make 0 0 2 0 0 (float_of_int (CalendarLib.Time.Second.from_int 0))) ;;Finally print it:
CalendarLib.Printer.Precise_Fcalendar.to_string initiale_2;;