| Anonymous | Login | Signup for a new account | 2013-05-19 11:54 CEST | ![]() |
| Main | My View | View Issues | Change Log | Roadmap |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||||
| 0003851 | OCaml | OCaml general | public | 2005-11-09 00:32 | 2005-11-29 13:11 | ||||||
| Reporter | administrator | ||||||||||
| Assigned To | |||||||||||
| Priority | normal | Severity | feature | Reproducibility | always | ||||||
| Status | acknowledged | Resolution | open | ||||||||
| Platform | OS | OS Version | |||||||||
| Product Version | |||||||||||
| Target Version | Fixed in Version | ||||||||||
| Summary | 0003851: strftime/strptime (followup to 0003849) | ||||||||||
| Description | Full_Name: Joshua Smith Version: 3.09 OS: Linux Submission from: dsl092-167-152.wdc2.dsl.speakeasy.net (66.92.167.152) Here is a patch that adds these: Index: otherlibs/unix/unix.mli =================================================================== --- otherlibs/unix/unix.mli (revision 1) +++ otherlibs/unix/unix.mli (revision 5) @@ -733,15 +733,30 @@ (** Convert a time in seconds, as returned by {!Unix.time}, into a date and a time. Assumes the local time zone. *) +val strptime: string -> string -> tm + (** This function is the converse of the {!Unix.strftime} function. + [strptime fmt data] convert a string containing time information [data] + into a [tm] struct according to the format specified by [fmt]. *) + +val asctime: tm -> string + (** Return the ascii representation of a given [tm] argument. The + ascii time is returned in the form of a string like + 'Wed Jun 30, 21:21:21 2005\n' *) + +val strftime: string -> tm -> string + (** This functions is the converse of the {!Unix.strptime} function. + [strftime fmt data] convert a a [tm] structure [data] into a string + according to the format specified by [fmt]. *) + val mktime : tm -> float * tm -(** Convert a date and time, specified by the [tm] argument, into - a time in seconds, as returned by {!Unix.time}. The [tm_isdst], - [tm_wday] and [tm_yday] fields of [tm] are ignored. Also return a - normalized copy of the given [tm] record, with the [tm_wday], - [tm_yday], and [tm_isdst] fields recomputed from the other fields, - and the other fields normalized (so that, e.g., 40 October is - changed into 9 November). The [tm] argument is interpreted in the - local time zone. *) + (** Convert a date and time, specified by the [tm] argument, into + a time in seconds, as returned by {!Unix.time}. The [tm_isdst], + [tm_wday] and [tm_yday] fields of [tm] are ignored. Also return a + normalized copy of the given [tm] record, with the [tm_wday], + [tm_yday], and [tm_isdst] fields recomputed from the other fields, + and the other fields normalized (so that, e.g., 40 October is + changed into 9 November). The [tm] argument is interpreted in the + local time zone. *) val alarm : int -> int (** Schedule a [SIGALRM] signal after the given number of seconds. *) Index: otherlibs/unix/gmtime.c =================================================================== --- otherlibs/unix/gmtime.c (revision 1) +++ otherlibs/unix/gmtime.c (revision 5) @@ -13,6 +13,7 @@ /* $Id: gmtime.c,v 1.17 2005/03/24 17:20:53 doligez Exp $ */ +#define _XOPEN_SOURCE #include <mlvalues.h> #include <alloc.h> #include <fail.h> @@ -20,7 +21,6 @@ #include "unixsupport.h" #include <time.h> #include <errno.h> - static value alloc_tm(struct tm *tm) { value res; @@ -59,6 +59,56 @@ #ifdef HAS_MKTIME +CAMLprim value unix_strptime(value f,value d) { + + char *fmt = String_val(f); + char *data = String_val(d); + char *err; + struct tm tm; + err = strptime(data,fmt,&tm); + if (err == NULL) unix_error(EINVAL, "strptime", Nothing); + return alloc_tm(&tm); +} + +CAMLprim value unix_asctime(value t) { + struct tm tm; + char *res; + + tm.tm_sec = Int_val(Field(t, 0)); + tm.tm_min = Int_val(Field(t, 1)); + tm.tm_hour = Int_val(Field(t, 2)); + tm.tm_mday = Int_val(Field(t, 3)); + tm.tm_mon = Int_val(Field(t, 4)); + tm.tm_year = Int_val(Field(t, 5)); + tm.tm_wday = Int_val(Field(t, 6)); + tm.tm_yday = Int_val(Field(t, 7)); + tm.tm_isdst = tm.tm_isdst = Bool_val(Field(t, 8)); + res = asctime(&tm); + if (res == NULL) unix_error(EINVAL, "asctime", Nothing); + return caml_copy_string(asctime(&tm)); + +} + +CAMLprim value unix_strftime(value f,value t) { + + char *fmt = String_val(f); + struct tm tm; + char *output = (char *)caml_alloc_string(255); + + tm.tm_sec = Int_val(Field(t, 0)); + tm.tm_min = Int_val(Field(t, 1)); + tm.tm_hour = Int_val(Field(t, 2)); + tm.tm_mday = Int_val(Field(t, 3)); + tm.tm_mon = Int_val(Field(t, 4)); + tm.tm_year = Int_val(Field(t, 5)); + tm.tm_wday = Int_val(Field(t, 6)); + tm.tm_yday = Int_val(Field(t, 7)); + tm.tm_isdst = tm.tm_isdst = Bool_val(Field(t, 8)); + strftime(output,255,fmt,&tm); + return caml_copy_string(output); + +} + CAMLprim value unix_mktime(value t) { struct tm tm; @@ -89,6 +139,15 @@ #else +CAMLprim value unix_strptime(value f,value d) +{ invalid_argument("strptime not implemented"); } + +CAMLprim value unix_asctime(value t) { +{ invalid_argument("asctime not implemented"); } + +CAMLprim value unix_strftime(value f,value t) { +{ invalid_argument("strftime not implemented"); } + CAMLprim value unix_mktime(value t) { invalid_argument("mktime not implemented"); } Index: otherlibs/unix/unix.ml =================================================================== --- otherlibs/unix/unix.ml (revision 1) +++ otherlibs/unix/unix.ml (revision 5) @@ -337,6 +337,9 @@ external gettimeofday : unit -> float = "unix_gettimeofday" external gmtime : float -> tm = "unix_gmtime" external localtime : float -> tm = "unix_localtime" +external strptime : string -> string -> tm = "unix_strptime" +external asctime : tm -> string = "unix_asctime" +external strftime : string -> tm -> string = "unix_strftime" external mktime : tm -> float * tm = "unix_mktime" external alarm : int -> int = "unix_alarm" external sleep : int -> unit = "unix_sleep" Index: otherlibs/threads/unix.ml =================================================================== --- otherlibs/threads/unix.ml (revision 1) +++ otherlibs/threads/unix.ml (revision 5) @@ -457,6 +457,9 @@ external gettimeofday : unit -> float = "unix_gettimeofday" external gmtime : float -> tm = "unix_gmtime" external localtime : float -> tm = "unix_localtime" +external strptime : string -> string -> tm = "unix_strptime" +external asctime : tm -> string = "unix_asctime" +external strftime : string -> tm -> string = "unix_strftime" external mktime : tm -> float * tm = "unix_mktime" external alarm : int -> int = "unix_alarm" | ||||||||||
| Tags | No tags attached. | ||||||||||
| Attached Files | |||||||||||
Relationships |
||||||
|
||||||
Notes |
|
|
(0000277) administrator (administrator) 2005-11-16 17:18 |
see also PR#3849 |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2005-11-18 10:13 | administrator | New Issue | |
| 2005-11-29 13:11 | doligez | Relationship added | child of 0003849 |
| Copyright © 2000 - 2011 MantisBT Group |