* strftime/strptime and asctime
@ 2005-11-06 0:30 Joshua Smith
2005-11-06 10:55 ` [Caml-list] " Richard Jones
2005-11-06 18:04 ` Shawn Wagner
0 siblings, 2 replies; 4+ messages in thread
From: Joshua Smith @ 2005-11-06 0:30 UTC (permalink / raw)
To: caml-list
This has come up on the list before (even by me once), but
I'm was wondering if anyone (like the maintainers) would have any
interest in a patch to the 3.09 codebase to add strptime, strftime and
asctime? It would probably work in the 3.08 code, too, but I figure
the most current version is the place to start.
The gmtime.c file seems like the logical place to put this, and I
don't think it would be a whole lot of work to do. If there is
interest, I'll do it. If this would be
wrong/problematic/foolish/duplicitive or anything
else then I would appreciate knowing that, too.
Thank you.
-jbs
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] strftime/strptime and asctime
2005-11-06 0:30 strftime/strptime and asctime Joshua Smith
@ 2005-11-06 10:55 ` Richard Jones
2005-11-06 18:04 ` Shawn Wagner
1 sibling, 0 replies; 4+ messages in thread
From: Richard Jones @ 2005-11-06 10:55 UTC (permalink / raw)
To: caml-list
On Sat, Nov 05, 2005 at 07:30:47PM -0500, Joshua Smith wrote:
> This has come up on the list before (even by me once), but
> I'm was wondering if anyone (like the maintainers) would have any
> interest in a patch to the 3.09 codebase to add strptime, strftime and
> asctime? It would probably work in the 3.08 code, too, but I figure
> the most current version is the place to start.
These functions would be very useful.
Rich.
--
Richard Jones, CTO Merjis Ltd.
Merjis - web marketing and technology - http://merjis.com
Team Notepad - intranets and extranets for business - http://team-notepad.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] strftime/strptime and asctime
2005-11-06 0:30 strftime/strptime and asctime Joshua Smith
2005-11-06 10:55 ` [Caml-list] " Richard Jones
@ 2005-11-06 18:04 ` Shawn Wagner
1 sibling, 0 replies; 4+ messages in thread
From: Shawn Wagner @ 2005-11-06 18:04 UTC (permalink / raw)
To: caml-list
On Sat, Nov 05, 2005 at 07:30:47PM -0500, Joshua Smith wrote:
> This has come up on the list before (even by me once), but
> I'm was wondering if anyone (like the maintainers) would have any
> interest in a patch to the 3.09 codebase to add strptime, strftime and
> asctime? It would probably work in the 3.08 code, too, but I figure
> the most current version is the place to start.
All three of these functions are already in the annex library
(http://raevnos.pennmush.org/code/annexlib/), not that it wouldn't be nice
to have them in the standard library too.
--
Shawn Wagner
shawnw@speakeasy.org
^ permalink raw reply [flat|nested] 4+ messages in thread
* strftime/strptime and asctime
@ 2005-11-08 4:09 Joshua Smith
0 siblings, 0 replies; 4+ messages in thread
From: Joshua Smith @ 2005-11-08 4:09 UTC (permalink / raw)
To: caml-list
[-- Attachment #1: Type: text/plain, Size: 272 bytes --]
Well,
There was one person who expressed interested, so I've attached the
patch to the 3.09 sources to add strptime, strftime, and asctime.
It's a very simple addition (code-wise), and I tried to keep things
looking like the existing code.
Thank you.
-jbs
[-- Attachment #2: ocaml-3.09.patchfile --]
[-- Type: application/octet-stream, Size: 5918 bytes --]
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"
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-11-08 4:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-11-06 0:30 strftime/strptime and asctime Joshua Smith
2005-11-06 10:55 ` [Caml-list] " Richard Jones
2005-11-06 18:04 ` Shawn Wagner
2005-11-08 4:09 Joshua Smith
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox