Mercurial > octave-nkf
view libinterp/corefcn/time.cc @ 17787:175b392e91fe
Use GNU style coding conventions for code in libinterp/
* libinterp/corefcn/Cell.h, libinterp/corefcn/__contourc__.cc,
libinterp/corefcn/__dispatch__.cc, libinterp/corefcn/__lin_interpn__.cc,
libinterp/corefcn/__pchip_deriv__.cc, libinterp/corefcn/__qp__.cc,
libinterp/corefcn/balance.cc, libinterp/corefcn/besselj.cc,
libinterp/corefcn/betainc.cc, libinterp/corefcn/bitfcns.cc,
libinterp/corefcn/bsxfun.cc, libinterp/corefcn/c-file-ptr-stream.cc,
libinterp/corefcn/c-file-ptr-stream.h, libinterp/corefcn/cellfun.cc,
libinterp/corefcn/colloc.cc, libinterp/corefcn/comment-list.h,
libinterp/corefcn/conv2.cc, libinterp/corefcn/daspk.cc,
libinterp/corefcn/dasrt.cc, libinterp/corefcn/dassl.cc,
libinterp/corefcn/data.cc, libinterp/corefcn/debug.cc,
libinterp/corefcn/defaults.cc, libinterp/corefcn/defaults.in.h,
libinterp/corefcn/defun-int.h, libinterp/corefcn/defun.cc,
libinterp/corefcn/det.cc, libinterp/corefcn/dirfns.cc,
libinterp/corefcn/display.cc, libinterp/corefcn/dlmread.cc,
libinterp/corefcn/dot.cc, libinterp/corefcn/dynamic-ld.cc,
libinterp/corefcn/dynamic-ld.h, libinterp/corefcn/eig.cc,
libinterp/corefcn/ellipj.cc, libinterp/corefcn/error.cc,
libinterp/corefcn/error.h, libinterp/corefcn/event-queue.h,
libinterp/corefcn/fft.cc, libinterp/corefcn/fft2.cc, libinterp/corefcn/fftn.cc,
libinterp/corefcn/file-io.cc, libinterp/corefcn/filter.cc,
libinterp/corefcn/find.cc, libinterp/corefcn/gammainc.cc,
libinterp/corefcn/gcd.cc, libinterp/corefcn/getgrent.cc,
libinterp/corefcn/getpwent.cc, libinterp/corefcn/getrusage.cc,
libinterp/corefcn/givens.cc, libinterp/corefcn/gl-render.cc,
libinterp/corefcn/gl2ps-renderer.cc, libinterp/corefcn/gl2ps-renderer.h,
libinterp/corefcn/graphics.cc, libinterp/corefcn/graphics.in.h,
libinterp/corefcn/gripes.cc, libinterp/corefcn/gripes.h,
libinterp/corefcn/help.cc, libinterp/corefcn/hess.cc,
libinterp/corefcn/hex2num.cc, libinterp/corefcn/input.cc,
libinterp/corefcn/input.h, libinterp/corefcn/inv.cc,
libinterp/corefcn/jit-ir.h, libinterp/corefcn/jit-typeinfo.cc,
libinterp/corefcn/jit-typeinfo.h, libinterp/corefcn/jit-util.h,
libinterp/corefcn/kron.cc, libinterp/corefcn/load-path.cc,
libinterp/corefcn/load-path.h, libinterp/corefcn/load-save.cc,
libinterp/corefcn/load-save.h, libinterp/corefcn/lookup.cc,
libinterp/corefcn/ls-ascii-helper.cc, libinterp/corefcn/ls-hdf5.cc,
libinterp/corefcn/ls-hdf5.h, libinterp/corefcn/ls-mat-ascii.cc,
libinterp/corefcn/ls-mat-ascii.h, libinterp/corefcn/ls-mat4.cc,
libinterp/corefcn/ls-mat5.cc, libinterp/corefcn/ls-mat5.h,
libinterp/corefcn/ls-oct-ascii.cc, libinterp/corefcn/lsode.cc,
libinterp/corefcn/lu.cc, libinterp/corefcn/luinc.cc,
libinterp/corefcn/mappers.cc, libinterp/corefcn/matrix_type.cc,
libinterp/corefcn/max.cc, libinterp/corefcn/md5sum.cc,
libinterp/corefcn/mex.cc, libinterp/corefcn/mexproto.h,
libinterp/corefcn/mgorth.cc, libinterp/corefcn/mxarray.in.h,
libinterp/corefcn/nproc.cc, libinterp/corefcn/oct-hist.cc,
libinterp/corefcn/oct-lvalue.h, libinterp/corefcn/oct-map.cc,
libinterp/corefcn/oct-map.h, libinterp/corefcn/oct-obj.h,
libinterp/corefcn/oct-prcstrm.h, libinterp/corefcn/oct-stdstrm.h,
libinterp/corefcn/oct-stream.cc, libinterp/corefcn/oct-stream.h,
libinterp/corefcn/octave-link.cc, libinterp/corefcn/octave-link.h,
libinterp/corefcn/pager.cc, libinterp/corefcn/pinv.cc,
libinterp/corefcn/pr-output.cc, libinterp/corefcn/procstream.h,
libinterp/corefcn/profiler.cc, libinterp/corefcn/pt-jit.cc,
libinterp/corefcn/pt-jit.h, libinterp/corefcn/quad.cc,
libinterp/corefcn/quadcc.cc, libinterp/corefcn/qz.cc,
libinterp/corefcn/rand.cc, libinterp/corefcn/rcond.cc,
libinterp/corefcn/regexp.cc, libinterp/corefcn/schur.cc,
libinterp/corefcn/sighandlers.cc, libinterp/corefcn/sighandlers.h,
libinterp/corefcn/sparse-xdiv.cc, libinterp/corefcn/sparse-xdiv.h,
libinterp/corefcn/sparse-xpow.cc, libinterp/corefcn/sparse.cc,
libinterp/corefcn/spparms.cc, libinterp/corefcn/sqrtm.cc,
libinterp/corefcn/str2double.cc, libinterp/corefcn/strfind.cc,
libinterp/corefcn/strfns.cc, libinterp/corefcn/sub2ind.cc,
libinterp/corefcn/svd.cc, libinterp/corefcn/syl.cc,
libinterp/corefcn/symtab.cc, libinterp/corefcn/symtab.h,
libinterp/corefcn/syscalls.cc, libinterp/corefcn/sysdep.cc,
libinterp/corefcn/sysdep.h, libinterp/corefcn/time.cc,
libinterp/corefcn/toplev.cc, libinterp/corefcn/toplev.h,
libinterp/corefcn/tril.cc, libinterp/corefcn/txt-eng-ft.cc,
libinterp/corefcn/txt-eng-ft.h, libinterp/corefcn/txt-eng.h,
libinterp/corefcn/typecast.cc, libinterp/corefcn/urlwrite.cc,
libinterp/corefcn/utils.cc, libinterp/corefcn/variables.cc,
libinterp/corefcn/variables.h, libinterp/corefcn/xdiv.cc,
libinterp/corefcn/xdiv.h, libinterp/corefcn/xnorm.h, libinterp/corefcn/xpow.cc,
libinterp/corefcn/xpow.h, libinterp/corefcn/zfstream.cc,
libinterp/corefcn/zfstream.h, libinterp/dldfcn/__delaunayn__.cc,
libinterp/dldfcn/__dsearchn__.cc, libinterp/dldfcn/__eigs__.cc,
libinterp/dldfcn/__fltk_uigetfile__.cc, libinterp/dldfcn/__glpk__.cc,
libinterp/dldfcn/__init_fltk__.cc, libinterp/dldfcn/__init_gnuplot__.cc,
libinterp/dldfcn/__magick_read__.cc, libinterp/dldfcn/__voronoi__.cc,
libinterp/dldfcn/amd.cc, libinterp/dldfcn/ccolamd.cc, libinterp/dldfcn/chol.cc,
libinterp/dldfcn/colamd.cc, libinterp/dldfcn/convhulln.cc,
libinterp/dldfcn/dmperm.cc, libinterp/dldfcn/fftw.cc, libinterp/dldfcn/qr.cc,
libinterp/dldfcn/symbfact.cc, libinterp/dldfcn/symrcm.cc,
libinterp/dldfcn/tsearch.cc, libinterp/octave-value/ov-base-diag.cc,
libinterp/octave-value/ov-base-diag.h, libinterp/octave-value/ov-base-int.cc,
libinterp/octave-value/ov-base-int.h, libinterp/octave-value/ov-base-mat.h,
libinterp/octave-value/ov-base-scalar.cc,
libinterp/octave-value/ov-base-scalar.h,
libinterp/octave-value/ov-base-sparse.cc,
libinterp/octave-value/ov-base-sparse.h, libinterp/octave-value/ov-base.cc,
libinterp/octave-value/ov-base.h, libinterp/octave-value/ov-bool-mat.cc,
libinterp/octave-value/ov-bool-mat.h, libinterp/octave-value/ov-bool-sparse.cc,
libinterp/octave-value/ov-bool-sparse.h, libinterp/octave-value/ov-bool.cc,
libinterp/octave-value/ov-bool.h, libinterp/octave-value/ov-builtin.cc,
libinterp/octave-value/ov-builtin.h, libinterp/octave-value/ov-cell.cc,
libinterp/octave-value/ov-cell.h, libinterp/octave-value/ov-ch-mat.cc,
libinterp/octave-value/ov-ch-mat.h, libinterp/octave-value/ov-class.cc,
libinterp/octave-value/ov-class.h, libinterp/octave-value/ov-colon.h,
libinterp/octave-value/ov-complex.cc, libinterp/octave-value/ov-complex.h,
libinterp/octave-value/ov-cx-diag.cc, libinterp/octave-value/ov-cx-diag.h,
libinterp/octave-value/ov-cx-mat.cc, libinterp/octave-value/ov-cx-mat.h,
libinterp/octave-value/ov-cx-sparse.cc, libinterp/octave-value/ov-cx-sparse.h,
libinterp/octave-value/ov-dld-fcn.h, libinterp/octave-value/ov-fcn-handle.cc,
libinterp/octave-value/ov-fcn-handle.h,
libinterp/octave-value/ov-fcn-inline.cc,
libinterp/octave-value/ov-fcn-inline.h, libinterp/octave-value/ov-fcn.h,
libinterp/octave-value/ov-float.cc, libinterp/octave-value/ov-float.h,
libinterp/octave-value/ov-flt-complex.cc,
libinterp/octave-value/ov-flt-complex.h,
libinterp/octave-value/ov-flt-cx-diag.cc,
libinterp/octave-value/ov-flt-cx-diag.h,
libinterp/octave-value/ov-flt-cx-mat.cc,
libinterp/octave-value/ov-flt-cx-mat.h,
libinterp/octave-value/ov-flt-re-diag.cc,
libinterp/octave-value/ov-flt-re-diag.h,
libinterp/octave-value/ov-flt-re-mat.cc,
libinterp/octave-value/ov-flt-re-mat.h, libinterp/octave-value/ov-int16.cc,
libinterp/octave-value/ov-int32.cc, libinterp/octave-value/ov-int64.cc,
libinterp/octave-value/ov-int8.cc, libinterp/octave-value/ov-intx.h,
libinterp/octave-value/ov-java.cc, libinterp/octave-value/ov-lazy-idx.h,
libinterp/octave-value/ov-mex-fcn.cc, libinterp/octave-value/ov-mex-fcn.h,
libinterp/octave-value/ov-null-mat.cc, libinterp/octave-value/ov-null-mat.h,
libinterp/octave-value/ov-oncleanup.cc, libinterp/octave-value/ov-perm.cc,
libinterp/octave-value/ov-perm.h, libinterp/octave-value/ov-range.cc,
libinterp/octave-value/ov-range.h, libinterp/octave-value/ov-re-diag.cc,
libinterp/octave-value/ov-re-diag.h, libinterp/octave-value/ov-re-mat.cc,
libinterp/octave-value/ov-re-mat.h, libinterp/octave-value/ov-re-sparse.cc,
libinterp/octave-value/ov-re-sparse.h, libinterp/octave-value/ov-scalar.cc,
libinterp/octave-value/ov-scalar.h, libinterp/octave-value/ov-str-mat.cc,
libinterp/octave-value/ov-str-mat.h, libinterp/octave-value/ov-struct.cc,
libinterp/octave-value/ov-struct.h, libinterp/octave-value/ov-type-conv.h,
libinterp/octave-value/ov-typeinfo.cc, libinterp/octave-value/ov-typeinfo.h,
libinterp/octave-value/ov-uint16.cc, libinterp/octave-value/ov-uint32.cc,
libinterp/octave-value/ov-uint64.cc, libinterp/octave-value/ov-uint8.cc,
libinterp/octave-value/ov-usr-fcn.cc, libinterp/octave-value/ov-usr-fcn.h,
libinterp/octave-value/ov.cc, libinterp/octave-value/ov.h, libinterp/octave.cc,
libinterp/operators/op-b-bm.cc, libinterp/operators/op-b-sbm.cc,
libinterp/operators/op-bm-b.cc, libinterp/operators/op-bm-bm.cc,
libinterp/operators/op-cdm-cdm.cc, libinterp/operators/op-chm.cc,
libinterp/operators/op-class.cc, libinterp/operators/op-cm-cm.cc,
libinterp/operators/op-cm-cs.cc, libinterp/operators/op-cm-s.cc,
libinterp/operators/op-cm-scm.cc, libinterp/operators/op-cm-sm.cc,
libinterp/operators/op-cs-cm.cc, libinterp/operators/op-cs-cs.cc,
libinterp/operators/op-cs-scm.cc, libinterp/operators/op-cs-sm.cc,
libinterp/operators/op-dm-dm.cc, libinterp/operators/op-dm-scm.cc,
libinterp/operators/op-double-conv.cc, libinterp/operators/op-fcdm-fcdm.cc,
libinterp/operators/op-fcm-fcm.cc, libinterp/operators/op-fcm-fcs.cc,
libinterp/operators/op-fcm-fm.cc, libinterp/operators/op-fcm-fs.cc,
libinterp/operators/op-fcs-fcm.cc, libinterp/operators/op-fcs-fcs.cc,
libinterp/operators/op-fcs-fm.cc, libinterp/operators/op-fcs-fs.cc,
libinterp/operators/op-fdm-fdm.cc, libinterp/operators/op-float-conv.cc,
libinterp/operators/op-fm-fcm.cc, libinterp/operators/op-fm-fcs.cc,
libinterp/operators/op-fm-fm.cc, libinterp/operators/op-fm-fs.cc,
libinterp/operators/op-fs-fcm.cc, libinterp/operators/op-fs-fcs.cc,
libinterp/operators/op-fs-fm.cc, libinterp/operators/op-fs-fs.cc,
libinterp/operators/op-m-cm.cc, libinterp/operators/op-m-cs.cc,
libinterp/operators/op-m-m.cc, libinterp/operators/op-m-s.cc,
libinterp/operators/op-m-scm.cc, libinterp/operators/op-m-sm.cc,
libinterp/operators/op-pm-scm.cc, libinterp/operators/op-range.cc,
libinterp/operators/op-s-cm.cc, libinterp/operators/op-s-cs.cc,
libinterp/operators/op-s-scm.cc, libinterp/operators/op-sbm-b.cc,
libinterp/operators/op-sbm-bm.cc, libinterp/operators/op-sbm-sbm.cc,
libinterp/operators/op-scm-cm.cc, libinterp/operators/op-scm-cs.cc,
libinterp/operators/op-scm-m.cc, libinterp/operators/op-scm-s.cc,
libinterp/operators/op-scm-scm.cc, libinterp/operators/op-scm-sm.cc,
libinterp/operators/op-sm-cm.cc, libinterp/operators/op-sm-m.cc,
libinterp/operators/op-sm-s.cc, libinterp/operators/op-sm-scm.cc,
libinterp/operators/op-sm-sm.cc, libinterp/operators/op-str-m.cc,
libinterp/operators/op-str-s.cc, libinterp/operators/op-str-str.cc,
libinterp/operators/ops.h, libinterp/parse-tree/lex.h,
libinterp/parse-tree/parse.h, libinterp/parse-tree/pt-arg-list.cc,
libinterp/parse-tree/pt-arg-list.h, libinterp/parse-tree/pt-assign.cc,
libinterp/parse-tree/pt-assign.h, libinterp/parse-tree/pt-binop.cc,
libinterp/parse-tree/pt-binop.h, libinterp/parse-tree/pt-bp.h,
libinterp/parse-tree/pt-cbinop.cc, libinterp/parse-tree/pt-check.cc,
libinterp/parse-tree/pt-colon.cc, libinterp/parse-tree/pt-colon.h,
libinterp/parse-tree/pt-const.cc, libinterp/parse-tree/pt-decl.cc,
libinterp/parse-tree/pt-decl.h, libinterp/parse-tree/pt-eval.cc,
libinterp/parse-tree/pt-except.h, libinterp/parse-tree/pt-exp.h,
libinterp/parse-tree/pt-fcn-handle.cc, libinterp/parse-tree/pt-id.cc,
libinterp/parse-tree/pt-id.h, libinterp/parse-tree/pt-idx.cc,
libinterp/parse-tree/pt-idx.h, libinterp/parse-tree/pt-loop.h,
libinterp/parse-tree/pt-mat.cc, libinterp/parse-tree/pt-misc.cc,
libinterp/parse-tree/pt-misc.h, libinterp/parse-tree/pt-pr-code.cc,
libinterp/parse-tree/pt-select.h, libinterp/parse-tree/pt-stmt.h,
libinterp/parse-tree/token.h, libinterp/version.cc:
Use GNU style coding conventions for code in libinterp/
author | Rik <rik@octave.org> |
---|---|
date | Mon, 28 Oct 2013 19:51:46 -0700 |
parents | d63878346099 |
children | b8bd0b55af45 |
line wrap: on
line source
/* Copyright (C) 1996-2013 John W. Eaton This file is part of Octave. Octave is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <string> #include "defun.h" #include "error.h" #include "oct-map.h" #include "oct-time.h" #include "ov.h" #include "oct-obj.h" // Date and time functions. static octave_scalar_map mk_tm_map (const octave_base_tm& t) { octave_scalar_map m; m.assign ("usec", static_cast<double> (t.usec ())); m.assign ("sec", static_cast<double> (t.sec ())); m.assign ("min", static_cast<double> (t.min ())); m.assign ("hour", static_cast<double> (t.hour ())); m.assign ("mday", static_cast<double> (t.mday ())); m.assign ("mon", static_cast<double> (t.mon ())); m.assign ("year", static_cast<double> (t.year ())); m.assign ("wday", static_cast<double> (t.wday ())); m.assign ("yday", static_cast<double> (t.yday ())); m.assign ("isdst", static_cast<double> (t.isdst ())); m.assign ("zone", t.zone ()); return m; } static inline int intfield (const octave_scalar_map& m, const std::string& k) { int retval = 0; octave_value v = m.getfield (k); if (! v.is_empty ()) retval = v.int_value (); return retval; } static inline std::string stringfield (const octave_scalar_map& m, const std::string& k) { std::string retval; octave_value v = m.getfield (k); if (! v.is_empty ()) retval = v.string_value (); return retval; } static octave_base_tm extract_tm (const octave_scalar_map& m) { octave_base_tm tm; tm.usec (intfield (m, "usec")); tm.sec (intfield (m, "sec")); tm.min (intfield (m, "min")); tm.hour (intfield (m, "hour")); tm.mday (intfield (m, "mday")); tm.mon (intfield (m, "mon")); tm.year (intfield (m, "year")); tm.wday (intfield (m, "wday")); tm.yday (intfield (m, "yday")); tm.isdst (intfield (m, "isdst")); tm.zone (stringfield (m, "zone")); return tm; } DEFUN (time, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {@var{seconds} =} time ()\n\ Return the current time as the number of seconds since the epoch. The\n\ epoch is referenced to 00:00:00 CUT (Coordinated Universal Time) 1 Jan\n\ 1970. For example, on Monday February 17, 1997 at 07:15:06 CUT, the\n\ value returned by @code{time} was 856163706.\n\ @seealso{strftime, strptime, localtime, gmtime, mktime, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value retval; if (args.length () == 0) retval = octave_time (); else print_usage (); return retval; } /* %!assert (time () > 0) */ DEFUN (gmtime, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {@var{tm_struct} =} gmtime (@var{t})\n\ Given a value returned from @code{time}, or any non-negative integer,\n\ return a time structure corresponding to CUT (Coordinated Universal Time).\n\ For example:\n\ \n\ @example\n\ @group\n\ gmtime (time ())\n\ @result{} @{\n\ usec = 0\n\ sec = 6\n\ min = 15\n\ hour = 7\n\ mday = 17\n\ mon = 1\n\ year = 97\n\ wday = 1\n\ yday = 47\n\ isdst = 0\n\ zone = CST\n\ @}\n\ @end group\n\ @end example\n\ @seealso{strftime, strptime, localtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value retval; if (args.length () == 1) { double tmp = args(0).double_value (); if (! error_state) retval = octave_value (mk_tm_map (octave_gmtime (tmp))); } else print_usage (); return retval; } /* %!test %! ts = gmtime (time ()); %! assert (isstruct (ts)); %! assert (isfield (ts, "usec")); %! assert (isfield (ts, "year")); %! assert (isfield (ts, "mon")); %! assert (isfield (ts, "mday")); %! assert (isfield (ts, "sec")); %! assert (isfield (ts, "min")); %! assert (isfield (ts, "wday")); %! assert (isfield (ts, "hour")); %! assert (isfield (ts, "isdst")); %! assert (isfield (ts, "yday")); %!error gmtime () %!error gmtime (1, 2) */ DEFUN (localtime, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {@var{tm_struct} =} localtime (@var{t})\n\ Given a value returned from @code{time}, or any non-negative integer,\n\ return a time structure corresponding to the local time zone.\n\ \n\ @example\n\ @group\n\ localtime (time ())\n\ @result{} @{\n\ usec = 0\n\ sec = 6\n\ min = 15\n\ hour = 1\n\ mday = 17\n\ mon = 1\n\ year = 97\n\ wday = 1\n\ yday = 47\n\ isdst = 0\n\ zone = CST\n\ @}\n\ @end group\n\ @end example\n\ @seealso{strftime, strptime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value retval; if (args.length () == 1) { double tmp = args(0).double_value (); if (! error_state) retval = octave_value (mk_tm_map (octave_localtime (tmp))); } else print_usage (); return retval; } /* %!test %! ts = localtime (time ()); %! assert (isstruct (ts)); %! assert (isfield (ts, "usec")); %! assert (isfield (ts, "year")); %! assert (isfield (ts, "mon")); %! assert (isfield (ts, "mday")); %! assert (isfield (ts, "sec")); %! assert (isfield (ts, "min")); %! assert (isfield (ts, "wday")); %! assert (isfield (ts, "hour")); %! assert (isfield (ts, "isdst")); %! assert (isfield (ts, "yday")); %!error localtime () %!error localtime (1, 2) */ DEFUN (mktime, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {@var{seconds} =} mktime (@var{tm_struct})\n\ Convert a time structure corresponding to the local time to the number\n\ of seconds since the epoch. For example:\n\ \n\ @example\n\ @group\n\ mktime (localtime (time ()))\n\ @result{} 856163706\n\ @end group\n\ @end example\n\ @seealso{strftime, strptime, localtime, gmtime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value retval; if (args.length () == 1) { octave_scalar_map map = args(0).scalar_map_value (); if (! error_state) { octave_base_tm tm = extract_tm (map); if (! error_state) retval = octave_time (tm); else error ("mktime: invalid TM_STRUCT argument"); } else error ("mktime: TM_STRUCT argument must be a structure"); } else print_usage (); return retval; } /* %!test %! t = time (); %! assert (fix (mktime (localtime (t))) == fix (t)); ## These tests fail on systems with mktime functions of limited ## intelligence: %!assert (datestr (datenum (1969, 1, 1), 0), "01-Jan-1969 00:00:00") %!assert (datestr (datenum (1901, 1, 1), 0), "01-Jan-1901 00:00:00") %!assert (datestr (datenum (1795, 1, 1), 0), "01-Jan-1795 00:00:00") %!error mktime () %!error mktime (1, 2, 3) */ DEFUN (strftime, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} strftime (@var{fmt}, @var{tm_struct})\n\ Format the time structure @var{tm_struct} in a flexible way using the\n\ format string @var{fmt} that contains @samp{%} substitutions\n\ similar to those in @code{printf}. Except where noted, substituted\n\ fields have a fixed size; numeric fields are padded if necessary.\n\ Padding is with zeros by default; for fields that display a single\n\ number, padding can be changed or inhibited by following the @samp{%}\n\ with one of the modifiers described below. Unknown field specifiers are\n\ copied as normal characters. All other characters are copied to the\n\ output without change. For example:\n\ \n\ @example\n\ @group\n\ strftime (\"%r (%Z) %A %e %B %Y\", localtime (time ()))\n\ @result{} \"01:15:06 AM (CST) Monday 17 February 1997\"\n\ @end group\n\ @end example\n\ \n\ Octave's @code{strftime} function supports a superset of the ANSI C\n\ field specifiers.\n\ \n\ @noindent\n\ Literal character fields:\n\ \n\ @table @code\n\ @item %%\n\ % character.\n\ \n\ @item %n\n\ Newline character.\n\ \n\ @item %t\n\ Tab character.\n\ @end table\n\ \n\ @noindent\n\ Numeric modifiers (a nonstandard extension):\n\ \n\ @table @code\n\ @item - (dash)\n\ Do not pad the field.\n\ \n\ @item _ (underscore)\n\ Pad the field with spaces.\n\ @end table\n\ \n\ @noindent\n\ Time fields:\n\ \n\ @table @code\n\ @item %H\n\ Hour (00-23).\n\ \n\ @item %I\n\ Hour (01-12).\n\ \n\ @item %k\n\ Hour (0-23).\n\ \n\ @item %l\n\ Hour (1-12).\n\ \n\ @item %M\n\ Minute (00-59).\n\ \n\ @item %p\n\ Locale's AM or PM.\n\ \n\ @item %r\n\ Time, 12-hour (hh:mm:ss [AP]M).\n\ \n\ @item %R\n\ Time, 24-hour (hh:mm).\n\ \n\ @item %s\n\ Time in seconds since 00:00:00, Jan 1, 1970 (a nonstandard extension).\n\ \n\ @item %S\n\ Second (00-61).\n\ \n\ @item %T\n\ Time, 24-hour (hh:mm:ss).\n\ \n\ @item %X\n\ Locale's time representation (%H:%M:%S).\n\ \n\ @item %Z\n\ Time zone (EDT), or nothing if no time zone is determinable.\n\ @end table\n\ \n\ @noindent\n\ Date fields:\n\ \n\ @table @code\n\ @item %a\n\ Locale's abbreviated weekday name (Sun-Sat).\n\ \n\ @item %A\n\ Locale's full weekday name, variable length (Sunday-Saturday).\n\ \n\ @item %b\n\ Locale's abbreviated month name (Jan-Dec).\n\ \n\ @item %B\n\ Locale's full month name, variable length (January-December).\n\ \n\ @item %c\n\ Locale's date and time (Sat Nov 04 12:02:33 EST 1989).\n\ \n\ @item %C\n\ Century (00-99).\n\ \n\ @item %d\n\ Day of month (01-31).\n\ \n\ @item %e\n\ Day of month ( 1-31).\n\ \n\ @item %D\n\ Date (mm/dd/yy).\n\ \n\ @item %h\n\ Same as %b.\n\ \n\ @item %j\n\ Day of year (001-366).\n\ \n\ @item %m\n\ Month (01-12).\n\ \n\ @item %U\n\ Week number of year with Sunday as first day of week (00-53).\n\ \n\ @item %w\n\ Day of week (0-6).\n\ \n\ @item %W\n\ Week number of year with Monday as first day of week (00-53).\n\ \n\ @item %x\n\ Locale's date representation (mm/dd/yy).\n\ \n\ @item %y\n\ Last two digits of year (00-99).\n\ \n\ @item %Y\n\ Year (1970-).\n\ @end table\n\ @seealso{strptime, localtime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value retval; if (args.length () == 2) { std::string fmt = args(0).string_value (); if (! error_state) { octave_scalar_map map = args(1).scalar_map_value (); if (! error_state) { octave_base_tm tm = extract_tm (map); if (! error_state) retval = tm.strftime (fmt); else error ("strftime: invalid TM_STRUCT argument"); } else error ("strftime: TM_STRUCT must be a structure"); } else error ("strftime: FMT must be a string"); } else print_usage (); return retval; } /* %!assert (ischar (strftime ("%%%n%t%H%I%k%l", localtime (time ())))); %!assert (ischar (strftime ("%M%p%r%R%s%S%T", localtime (time ())))); %!assert (ischar (strftime ("%X%Z%z%a%A%b%B", localtime (time ())))); %!assert (ischar (strftime ("%c%C%d%e%D%h%j", localtime (time ())))); %!assert (ischar (strftime ("%m%U%w%W%x%y%Y", localtime (time ())))); %!error strftime () %!error strftime ("foo", localtime (time ()), 1) */ DEFUN (strptime, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {[@var{tm_struct}, @var{nchars}] =} strptime (@var{str}, @var{fmt})\n\ Convert the string @var{str} to the time structure @var{tm_struct} under\n\ the control of the format string @var{fmt}.\n\ \n\ If @var{fmt} fails to match, @var{nchars} is 0; otherwise, it is set to the\n\ position of last matched character plus 1. Always check for this unless\n\ you're absolutely sure the date string will be parsed correctly.\n\ @seealso{strftime, localtime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday}\n\ @end deftypefn") { octave_value_list retval; if (args.length () == 2) { std::string str = args(0).string_value (); if (! error_state) { std::string fmt = args(1).string_value (); if (! error_state) { octave_strptime t (str, fmt); retval(1) = t.characters_converted (); retval(0) = octave_value (mk_tm_map (t)); } else error ("strptime: FMT must be a string"); } else error ("strptime: argument STR must be a string"); } else print_usage (); return retval; }