File: pl_Date_Parse.ml

package info (click to toggle)
perl4caml 0.9.5-8
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 540 kB
  • sloc: ml: 1,572; ansic: 957; makefile: 186; perl: 45
file content (45 lines) | stat: -rw-r--r-- 1,440 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(** Wrapper around Perl [Date::Parse] class.
  *
  * Copyright (C) 2003 Merjis Ltd.
  *
  * $Id: pl_Date_Parse.ml,v 1.1 2003/11/19 16:28:23 rich Exp $
  *)

open Perl

let _ = eval "use Date::Parse qw()"

(* XXX languages not supported yet - when it is supported, it'll be in
 * [pl_Date_Language] anyway, not here  -- RWMJ
 *)

let str2time ?zone date =
  let args =
    [sv_of_string date] @
    match zone with
	None -> []
      | Some zone -> [sv_of_string zone] in
  let sv = call ~fn:"Date::Parse::str2time" args in
  if sv_is_undef sv then
    invalid_arg "Date::Parse: Could not parse date";
  float_of_sv sv

let strptime ?zone date =
  let args =
    [sv_of_string date] @
    match zone with
	None -> []
      | Some zone -> [sv_of_string zone] in
  let svs = call_array ~fn:"Date::Parse::strptime" args in
  match svs with
      [] -> invalid_arg "Date::Parse: Could not parse date"
    | [ ss; mm; hh; day; month; year; zone ] ->
	((if sv_is_undef ss then None else Some (int_of_sv ss)),
	 (if sv_is_undef mm then None else Some (int_of_sv mm)),
	 (if sv_is_undef hh then None else Some (int_of_sv hh)),
	 (if sv_is_undef day then None else Some (int_of_sv day)),
	 (if sv_is_undef month then None else Some (int_of_sv month)),
	 (if sv_is_undef year then None else Some (int_of_sv year)),
	 (if sv_is_undef zone then None else Some (string_of_sv zone)))
    | _ ->
	failwith "Pl_Date_Parse: invalid list returned by strptime"