source: trunk/src/uvmat_doc/FUNCTIONS_DOC/datenum_uvmat.html @ 37

Last change on this file since 37 was 37, checked in by sommeria, 14 years ago

create_grid.fig ,
uvmat_doc and all the included files added

File size: 46.8 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of datenum_uvmat</title>
6  <meta name="keywords" content="datenum_uvmat">
7  <meta name="description" content="'datenum_uvmat': like the Matlab function datenum.m but gives empty output instead of stopping for input error">
8  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
9  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
10  <meta name="robots" content="index, follow">
11  <link type="text/css" rel="stylesheet" href="../m2html.css">
12</head>
13<body>
14<a name="_top"></a>
15<div><a href="../index.html">Home</a> &gt;  <a href="index.html">.</a> &gt; datenum_uvmat.m</div>
16
17<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
18<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>datenum_uvmat
21</h1>
22
23<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
24<div class="box"><strong>'datenum_uvmat': like the Matlab function datenum.m but gives empty output instead of stopping for input error</strong></div>
25
26<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
27<div class="box"><strong>function n = datenum_uvmat(arg1,arg2,arg3,h,min,s) </strong></div>
28
29<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
30<div class="fragment"><pre class="comment">'datenum_uvmat': like the Matlab function datenum.m but gives empty output instead of stopping for input error
31--------------------------------------------------------------------------
32DATENUM Serial date number.
33    N = DATENUM(V) converts one or more date vectors V into serial date
34    numbers N. Input V can be an M-by-6 or M-by-3 matrix containing M full
35    or partial date vectors respectively.  DATENUM returns a column vector
36    of M date numbers.
37
38    A date vector contains six elements, specifying year, month, day, hour,
39    minute, and second. A partial date vector has three elements, specifying
40    year, month, and day.  Each element of V must be a positive double
41    precision number.  A serial date number of 1 corresponds to Jan-1-0000. 
42    The year 0000 is merely a reference point and is not intended to be
43    interpreted as a real year.
44
45    N = DATENUM(S,F) converts one or more date strings S to serial date
46    numbers N using format string F. S can be a character array where each
47    row corresponds to one date string, or one dimensional cell array of
48    strings.  DATENUM returns a column vector of M date numbers, where M is
49    the number of strings in S.
50
51    All of the date strings in S must have the same format F, which must be
52    composed of date format symbols according to Table 2 in DATESTR help.
53    Formats with 'Q' are not accepted by DATENUM. 
54
55    Certain formats may not contain enough information to compute a date
56    number.  In those cases, hours, minutes, and seconds default to 0, days
57    default to 1, months default to January, and years default to the
58    current year. Date strings with two character years are interpreted to
59    be within the 100 years centered around the current year.
60
61    N = DATENUM(S,F,P) or N = DATENUM(S,P,F) uses the specified format F
62    and the pivot year P to determine the date number N, given the date
63    string S.  The pivot year is the starting year of the 100-year range in
64    which a two-character year resides.  The default pivot year is the
65    current year minus 50 years.
66
67    N = DATENUM(Y,MO,D) and N = DATENUM([Y,MO,D]) return the serial date
68    numbers for corresponding elements of the Y,MO,D (year,month,day)
69    arrays. Y, MO, and D must be arrays of the same size (or any can be a
70    scalar).
71
72    N = DATENUM(Y,MO,D,H,MI,S) and N = DATENUM([Y,MO,D,H,MI,S]) return the
73    serial date numbers for corresponding elements of the Y,MO,D,H,MI,S
74    (year,month,day,hour,minute,second) arrays.  The six arguments must be
75    arrays of the same size (or any can be a scalar).
76
77    N = DATENUM(S) converts the string or date vector (as defined by
78    DATEVEC) S into a serial date number.  If S is a string, it must be in
79    one of the date formats 0,1,2,6,13,14,15,16,23 as defined by DATESTR.
80    This calling syntax is provided for backward compatibility, and is
81    significantly slower than the syntax which specifies the format string.
82    If the format is known, the N = DATENUM(S,F) syntax should be used.
83
84    N = DATENUM(S,P) converts the date string S, using pivot year P. If the
85    format is known, the N = DATENUM(S,F,P) or N = DATENUM(S,P,F) syntax
86    should be used.
87
88    Note:  The vectorized calling syntax can offer significant performance
89    improvement for large arrays.
90
91    Examples:
92        n = datenum('19-May-2000') returns n = 730625.
93        n = datenum(2001,12,19) returns n = 731204.
94        n = datenum(2001,12,19,18,0,0) returns n = 731204.75.
95        n = datenum('19.05.2000','dd.mm.yyyy') returns n = 730625.
96
97    See also NOW, DATESTR, DATEVEC, DATETICK.</pre></div>
98
99<!-- crossreference -->
100<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
101This function calls:
102<ul style="list-style-image:url(../matlabicon.gif)">
103</ul>
104This function is called by:
105<ul style="list-style-image:url(../matlabicon.gif)">
106</ul>
107<!-- crossreference -->
108
109<h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
110<ul style="list-style-image:url(../matlabicon.gif)">
111<li><a href="#_sub1" class="code">function [y,mo,d,h,mi,s] = datevec(t,varargin)</a></li><li><a href="#_sub2" class="code">function [format] = getformat(str)</a></li></ul>
112<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
113<div class="fragment"><pre>0001 <span class="comment">%'datenum_uvmat': like the Matlab function datenum.m but gives empty output instead of stopping for input error</span>
1140002 <span class="comment">%--------------------------------------------------------------------------</span>
1150003 <a name="_sub0" href="#_subfunctions" class="code">function n = datenum_uvmat(arg1,arg2,arg3,h,min,s)</a>
1160004 <span class="comment">%DATENUM Serial date number.</span>
1170005 <span class="comment">%    N = DATENUM(V) converts one or more date vectors V into serial date</span>
1180006 <span class="comment">%    numbers N. Input V can be an M-by-6 or M-by-3 matrix containing M full</span>
1190007 <span class="comment">%    or partial date vectors respectively.  DATENUM returns a column vector</span>
1200008 <span class="comment">%    of M date numbers.</span>
1210009 <span class="comment">%</span>
1220010 <span class="comment">%    A date vector contains six elements, specifying year, month, day, hour,</span>
1230011 <span class="comment">%    minute, and second. A partial date vector has three elements, specifying</span>
1240012 <span class="comment">%    year, month, and day.  Each element of V must be a positive double</span>
1250013 <span class="comment">%    precision number.  A serial date number of 1 corresponds to Jan-1-0000.</span>
1260014 <span class="comment">%    The year 0000 is merely a reference point and is not intended to be</span>
1270015 <span class="comment">%    interpreted as a real year.</span>
1280016 <span class="comment">%</span>
1290017 <span class="comment">%    N = DATENUM(S,F) converts one or more date strings S to serial date</span>
1300018 <span class="comment">%    numbers N using format string F. S can be a character array where each</span>
1310019 <span class="comment">%    row corresponds to one date string, or one dimensional cell array of</span>
1320020 <span class="comment">%    strings.  DATENUM returns a column vector of M date numbers, where M is</span>
1330021 <span class="comment">%    the number of strings in S.</span>
1340022 <span class="comment">%</span>
1350023 <span class="comment">%    All of the date strings in S must have the same format F, which must be</span>
1360024 <span class="comment">%    composed of date format symbols according to Table 2 in DATESTR help.</span>
1370025 <span class="comment">%    Formats with 'Q' are not accepted by DATENUM.</span>
1380026 <span class="comment">%</span>
1390027 <span class="comment">%    Certain formats may not contain enough information to compute a date</span>
1400028 <span class="comment">%    number.  In those cases, hours, minutes, and seconds default to 0, days</span>
1410029 <span class="comment">%    default to 1, months default to January, and years default to the</span>
1420030 <span class="comment">%    current year. Date strings with two character years are interpreted to</span>
1430031 <span class="comment">%    be within the 100 years centered around the current year.</span>
1440032 <span class="comment">%</span>
1450033 <span class="comment">%    N = DATENUM(S,F,P) or N = DATENUM(S,P,F) uses the specified format F</span>
1460034 <span class="comment">%    and the pivot year P to determine the date number N, given the date</span>
1470035 <span class="comment">%    string S.  The pivot year is the starting year of the 100-year range in</span>
1480036 <span class="comment">%    which a two-character year resides.  The default pivot year is the</span>
1490037 <span class="comment">%    current year minus 50 years.</span>
1500038 <span class="comment">%</span>
1510039 <span class="comment">%    N = DATENUM(Y,MO,D) and N = DATENUM([Y,MO,D]) return the serial date</span>
1520040 <span class="comment">%    numbers for corresponding elements of the Y,MO,D (year,month,day)</span>
1530041 <span class="comment">%    arrays. Y, MO, and D must be arrays of the same size (or any can be a</span>
1540042 <span class="comment">%    scalar).</span>
1550043 <span class="comment">%</span>
1560044 <span class="comment">%    N = DATENUM(Y,MO,D,H,MI,S) and N = DATENUM([Y,MO,D,H,MI,S]) return the</span>
1570045 <span class="comment">%    serial date numbers for corresponding elements of the Y,MO,D,H,MI,S</span>
1580046 <span class="comment">%    (year,month,day,hour,minute,second) arrays.  The six arguments must be</span>
1590047 <span class="comment">%    arrays of the same size (or any can be a scalar).</span>
1600048 <span class="comment">%</span>
1610049 <span class="comment">%    N = DATENUM(S) converts the string or date vector (as defined by</span>
1620050 <span class="comment">%    DATEVEC) S into a serial date number.  If S is a string, it must be in</span>
1630051 <span class="comment">%    one of the date formats 0,1,2,6,13,14,15,16,23 as defined by DATESTR.</span>
1640052 <span class="comment">%    This calling syntax is provided for backward compatibility, and is</span>
1650053 <span class="comment">%    significantly slower than the syntax which specifies the format string.</span>
1660054 <span class="comment">%    If the format is known, the N = DATENUM(S,F) syntax should be used.</span>
1670055 <span class="comment">%</span>
1680056 <span class="comment">%    N = DATENUM(S,P) converts the date string S, using pivot year P. If the</span>
1690057 <span class="comment">%    format is known, the N = DATENUM(S,F,P) or N = DATENUM(S,P,F) syntax</span>
1700058 <span class="comment">%    should be used.</span>
1710059 <span class="comment">%</span>
1720060 <span class="comment">%    Note:  The vectorized calling syntax can offer significant performance</span>
1730061 <span class="comment">%    improvement for large arrays.</span>
1740062 <span class="comment">%</span>
1750063 <span class="comment">%    Examples:</span>
1760064 <span class="comment">%        n = datenum('19-May-2000') returns n = 730625.</span>
1770065 <span class="comment">%        n = datenum(2001,12,19) returns n = 731204.</span>
1780066 <span class="comment">%        n = datenum(2001,12,19,18,0,0) returns n = 731204.75.</span>
1790067 <span class="comment">%        n = datenum('19.05.2000','dd.mm.yyyy') returns n = 730625.</span>
1800068 <span class="comment">%</span>
1810069 <span class="comment">%    See also NOW, DATESTR, DATEVEC, DATETICK.</span>
1820070
1830071 <span class="comment">%   Copyright 1984-2004 The MathWorks, Inc.</span>
1840072 <span class="comment">%   $Revision: 1.24.4.7 $  $Date: 2004/10/27 23:53:57 $</span>
1850073
1860074 <span class="keyword">if</span> (nargin&lt;1) || (nargin&gt;6)
1870075     error(<span class="string">'MATLAB:datenumr:Nargin'</span>,nargchk(1,6,nargin));
1880076 <span class="keyword">end</span>
1890077
1900078 <span class="comment">% parse input arguments</span>
1910079 isdatestr = ~isnumeric(arg1);
1920080 isdateformat = false;
1930081 <span class="keyword">if</span> nargin == 2
1940082     isdateformat = ischar(arg2);
1950083 <span class="keyword">elseif</span> nargin == 3
1960084     isdateformat = [ischar(arg2),ischar(arg3)];
1970085 <span class="keyword">end</span>
1980086 <span class="comment">% try to convert date string or date vector to a date number</span>
1990087 <span class="keyword">try</span>
2000088     <span class="keyword">switch</span> nargin
2010089         <span class="keyword">case</span> 1
2020090             <span class="keyword">if</span> isdatestr
2030091                 n = datenummx(<a href="#_sub1" class="code" title="subfunction [y,mo,d,h,mi,s] = datevec(t,varargin)">datevec</a>(arg1));
2040092             <span class="keyword">elseif</span> (size(arg1,2)==3) || (size(arg1,2)==6)
2050093                 n = datenummx(arg1);
2060094             <span class="keyword">else</span>
2070095                 n = arg1;
2080096             <span class="keyword">end</span>
2090097         <span class="keyword">case</span> 2
2100098             <span class="keyword">if</span> isdateformat
2110099                 <span class="keyword">if</span> ischar(arg1)
2120100                     arg1 = cellstr(arg1);
2130101                 <span class="keyword">end</span>
2140102                 n = dtstr2dtnummx(arg1,cnv2icudf(arg2));
2150103             <span class="keyword">else</span>
2160104                 n = datenummx(<a href="#_sub1" class="code" title="subfunction [y,mo,d,h,mi,s] = datevec(t,varargin)">datevec</a>(arg1,arg2));
2170105             <span class="keyword">end</span>
2180106         <span class="keyword">case</span> 3
2190107             <span class="keyword">if</span> any(isdateformat)
2200108                 <span class="keyword">if</span> isdateformat(1)
2210109                     format = arg2;
2220110                     pivot = arg3;
2230111                 <span class="keyword">elseif</span> isdateformat(2)
2240112                     format = arg3;
2250113                     pivot = arg2;
2260114                 <span class="keyword">end</span>
2270115                 <span class="keyword">if</span> ischar(arg1)
2280116                     arg1 = cellstr(arg1);
2290117                 <span class="keyword">end</span>
2300118                 icu_dtformat = cnv2icudf(format);
2310119                 showyr =  strfind(icu_dtformat,<span class="string">'y'</span>);
2320120                 <span class="keyword">if</span> ~isempty(showyr)
2330121                     wrtYr =  numel(showyr);
2340122                     checkYr = diff(showyr);
2350123                     <span class="keyword">if</span> any(checkYr~=1)
2360124                         error(<span class="string">'MATLAB:datenum:YearFormat'</span>,<span class="string">'Unrecognized year format'</span>);
2370125                     <span class="keyword">end</span>
2380126                     <span class="keyword">switch</span> wrtYr
2390127                         <span class="keyword">case</span> 4,
2400128                             icu_dtformat = strrep(icu_dtformat,<span class="string">'yyyy'</span>,<span class="string">'yy'</span>);
2410129                         <span class="keyword">case</span> 3,
2420130                             icu_dtformat = strrep(icu_dtformat,<span class="string">'yyy'</span>,<span class="string">'yy'</span>);
2430131                     <span class="keyword">end</span>
2440132                 <span class="keyword">end</span>
2450133                 n = dtstr2dtnummx(arg1,icu_dtformat,pivot);
2460134             <span class="keyword">else</span>
2470135                 n = datenummx(arg1,arg2,arg3);
2480136             <span class="keyword">end</span>
2490137         <span class="keyword">case</span> 6, n = datenummx(arg1,arg2,arg3,h,min,s);
2500138         <span class="keyword">otherwise</span>, error(<span class="string">'MATLAB:datenum:Nargin'</span>,<span class="keyword">...</span>
2510139                          <span class="string">'Incorrect number of arguments'</span>);
2520140     <span class="keyword">end</span>
2530141 <span class="keyword">catch</span>
2540142     err = lasterror;
2550143     err.message = sprintf(<span class="string">'DATENUM failed.\n%s'</span>,err.message);
2560144     
2570145     <span class="keyword">if</span> (nargin == 1 &amp;&amp; ~isdatestr)
2580146         err.identifier = <span class="string">'MATLAB:datenum:ConvertDateNumber'</span>;
2590147     <span class="keyword">elseif</span> (nargin == 1 &amp;&amp; isdatestr) || (isdatestr &amp;&amp; any(isdateformat))
2600148         err.identifier = <span class="string">'MATLAB:datenum:ConvertDateString'</span>;
2610149     <span class="keyword">elseif</span> (nargin &gt; 1) &amp;&amp; ~isdatestr &amp;&amp; ~any(isdateformat)
2620150         err.identifier = <span class="string">'MATLAB:datenum:ConvertDateVector'</span>;
2630151     <span class="keyword">end</span>
2640152 
2650153     rethrow(err);
2660154 <span class="keyword">end</span>
2670155 <span class="keyword">end</span>
2680156
2690157 <a name="_sub1" href="#_subfunctions" class="code">function [y,mo,d,h,mi,s] = datevec(t,varargin)</a>
2700158 <span class="comment">%DATEVEC Date components.</span>
2710159 <span class="comment">%    V = DATEVEC(N) converts one or more date numbers N to date vectors V. N</span>
2720160 <span class="comment">%    can be a scalar, vector, or multidimensional array of positive date</span>
2730161 <span class="comment">%    numbers. DATEVEC returns an M-by-6 matrix containing M date vectors,</span>
2740162 <span class="comment">%    where M is the total number of date numbers in N.</span>
2750163 <span class="comment">%</span>
2760164 <span class="comment">%    V = DATEVEC(S,F) converts one or more date strings S to date vectors</span>
2770165 <span class="comment">%    V using format string F to interpret the date strings in S. S can be a</span>
2780166 <span class="comment">%    cell array of strings or a character array where each row corresponds</span>
2790167 <span class="comment">%    to one date string. All of the date strings in S must have the same</span>
2800168 <span class="comment">%    format which must be composed of date format symbols according to</span>
2810169 <span class="comment">%    Table 2 in DATESTR help. Formats with 'Q' are not accepted by DATEVEC.</span>
2820170 <span class="comment">%    DATEVEC returns an M-by-6 matrix of date vectors, where M is the number</span>
2830171 <span class="comment">%    of date strings in S.</span>
2840172 <span class="comment">%</span>
2850173 <span class="comment">%    Certain formats may not contain enough information to compute a date</span>
2860174 <span class="comment">%    vector.  In those cases, hours, minutes, and seconds default to 0, days</span>
2870175 <span class="comment">%    default to 1, months default to January, and years default to the</span>
2880176 <span class="comment">%    current year. Date strings with two character years are interpreted to</span>
2890177 <span class="comment">%    be within the 100 years centered around the current year.</span>
2900178 <span class="comment">%</span>
2910179 <span class="comment">%    V = DATEVEC(S,F,P) or V = DATEVEC(S,P,F) converts the date string S to</span>
2920180 <span class="comment">%    a date vector V, using the pivot year P and the date format F.  The</span>
2930181 <span class="comment">%    pivot year is the starting year of the 100-year range in which a</span>
2940182 <span class="comment">%    two-character year resides.  The default pivot year is the current year</span>
2950183 <span class="comment">%    minus 50 years.</span>
2960184 <span class="comment">%</span>
2970185 <span class="comment">%    [Y,MO,D,H,MI,S] = DATEVEC(...) takes any of the two syntaxes shown</span>
2980186 <span class="comment">%    above and returns the components of the date vector as individual</span>
2990187 <span class="comment">%    variables.</span>
3000188 <span class="comment">%</span>
3010189 <span class="comment">%    V = DATEVEC(S) converts date string S to date vector V. S must be in</span>
3020190 <span class="comment">%    one of the date formats 0,1,2,6,13,14,15,16,23 as defined by DATESTR.</span>
3030191 <span class="comment">%    This calling syntax is provided for backward compatibility, and is</span>
3040192 <span class="comment">%    significantly slower than the syntax which specifies the format string.</span>
3050193 <span class="comment">%    If the format is known, the V = DATEVEC(S,F) syntax should be used.</span>
3060194 <span class="comment">%</span>
3070195 <span class="comment">%    V = DAVEVEC(S,P) converts the date string S using pivot year P.</span>
3080196 <span class="comment">%    If the format is known, the V = DATEVEC(S,F,P) or V = DATEVEC(S,P,F)</span>
3090197 <span class="comment">%    syntax should be used.</span>
3100198 <span class="comment">%</span>
3110199 <span class="comment">%    Note 1:  If more than one input argument is used, the first argument</span>
3120200 <span class="comment">%    must be a date string or array of date strings.</span>
3130201 <span class="comment">%</span>
3140202 <span class="comment">%    Note 2:  The vectorized calling syntax can offer significant performance</span>
3150203 <span class="comment">%    improvement for large arrays.</span>
3160204 <span class="comment">%</span>
3170205 <span class="comment">%    Examples</span>
3180206 <span class="comment">%        d = '12/24/1984';</span>
3190207 <span class="comment">%        t = 725000.00;</span>
3200208 <span class="comment">%        c = datevec(d) or c = datevec(t) produce c = [1984 12 24 0 0 0].</span>
3210209 <span class="comment">%        [y,m,d,h,mi,s] = datevec(d) returns y=1984, m=12, d=24, h=0, mi=0, s=0.</span>
3220210 <span class="comment">%        c = datevec('5/6/03') produces c = [2003 5 6 0 0 0] until 2054.</span>
3230211 <span class="comment">%        c = datevec('5/6/03',1900) produces c = [1903 5 6 0 0 0].</span>
3240212 <span class="comment">%        c = datevec('19.05.2000','dd.mm.yyyy') produces c = [2000 5 19 0 0 0].</span>
3250213 <span class="comment">%</span>
3260214 <span class="comment">%    See also DATENUM, DATESTR, CLOCK, DATETICK.</span>
3270215
3280216 <span class="comment">%    Copyright 1984-2004 The MathWorks, Inc.</span>
3290217 <span class="comment">%    $Revision: 1.28.4.11 $  $Date: 2004/10/27 23:53:59 $</span>
3300218
3310219 <span class="keyword">if</span> (nargin&lt;1) || (nargin&gt;3)
3320220 <span class="comment">%     error('MATLAB:datevec:Nargin',nargchk(1,3,nargin));</span>
3330221     <span class="keyword">return</span>
3340222 <span class="keyword">end</span>
3350223
3360224 <span class="comment">% parse input arguments</span>
3370225 isdatestr = ~isnumeric(t);
3380226 isdateformat = false;
3390227 <span class="keyword">if</span> ~isdatestr &amp;&amp; nargin &gt; 1
3400228     warning(<span class="string">'MATLAB:datevec:Inputs'</span>, <span class="keyword">...</span>
3410229         <span class="string">'Unless the first input argument is a date string, all subsequent\narguments will be ignored.'</span>);
3420230 <span class="keyword">elseif</span> nargin &gt; 1
3430231     isdateformat = cellfun(<span class="string">'isclass'</span>,varargin,<span class="string">'char'</span>);
3440232     <span class="keyword">if</span> (nargin == 3)
3450233         <span class="keyword">if</span> ~isdateformat(1)
3460234             pivotyear = varargin{1};
3470235         <span class="keyword">elseif</span> ~isdateformat(2)
3480236             pivotyear = varargin{2};
3490237         <span class="keyword">elseif</span> isdateformat(1) &amp;&amp; isdateformat(2)
3500238 <span class="comment">%             error('MATLAB:datevec:DateFormat',...</span>
3510239 <span class="comment">%                 'You specified two date format strings.\nThere can only be one.');</span>
3520240            <span class="keyword">return</span>
3530241         <span class="keyword">end</span> 
3540242     <span class="keyword">elseif</span> (nargin == 2) &amp;&amp; ~isdateformat
3550243         pivotyear = varargin{1};
3560244     <span class="keyword">end</span>
3570245 <span class="keyword">end</span>
3580246
3590247 <span class="keyword">if</span> isdatestr &amp;&amp; isempty(t)
3600248     <span class="keyword">if</span> nargout &lt;= 1
3610249         y = zeros(0,6);
3620250     <span class="keyword">else</span>
3630251         [y,mo,d,h,mi,s] = deal(zeros(0,0));
3640252     <span class="keyword">end</span>;
3650253     warning(<span class="string">'MATLAB:datevec:EmptyDate'</span>,<span class="keyword">...</span>
3660254         <span class="string">'Usage of DATEVEC with empty date strings is not supported.\nResults may change in future versions.'</span>);
3670255     <span class="keyword">return</span>;
3680256 <span class="keyword">end</span>
3690257
3700258 <span class="comment">% branch to appropriate date string parser</span>
3710259 <span class="keyword">if</span>  isdatestr
3720260     <span class="comment">% a date format string was specified</span>
3730261     <span class="comment">% map date format to ICU date format tokens</span>
3740262     <span class="keyword">if</span> ischar(t)
3750263         <span class="comment">% convert to cellstring.</span>
3760264         t = cellstr(t);
3770265     <span class="keyword">end</span>
3780266     icu_dtformat = {};
3790267     <span class="keyword">if</span> ~any(isdateformat)
3800268         format = <a href="#_sub2" class="code" title="subfunction [format] = getformat(str)">getformat</a>(t);
3810269         <span class="keyword">if</span> ~isempty(format)
3820270             icu_dtformat = cnv2icudf(format);
3830271         <span class="keyword">end</span>
3840272     <span class="keyword">else</span>
3850273         icu_dtformat = cnv2icudf(varargin{isdateformat});
3860274     <span class="keyword">end</span>
3870275     <span class="keyword">if</span> ~isempty(icu_dtformat)
3880276         <span class="comment">% call ICU MEX function to parse date string to date vector</span>
3890277         <span class="keyword">try</span>
3900278             <span class="keyword">if</span> nargin &lt; 2 || (nargin == 2 &amp;&amp; any(isdateformat))
3910279                 y = dtstr2dtvecmx(t,icu_dtformat);
3920280             <span class="keyword">else</span>
3930281                 showyr =  findstr(icu_dtformat,<span class="string">'y'</span>);
3940282                 <span class="keyword">if</span> ~isempty(showyr)
3950283                     wrtYr =  numel(showyr);
3960284                     <span class="keyword">if</span> showyr(end) - showyr(1) &gt;= wrtYr
3970285 <span class="comment">%                         error('MATLAB:datevec:YearFormat','Unrecognized year format');</span>
3980286                         <span class="keyword">return</span>
3990287                     <span class="keyword">end</span>
4000288                     <span class="keyword">switch</span> wrtYr
4010289                         <span class="keyword">case</span> 4,
4020290                             icu_dtformat = strrep(icu_dtformat,<span class="string">'yyyy'</span>,<span class="string">'yy'</span>);
4030291                         <span class="keyword">case</span> 3,
4040292                             icu_dtformat = strrep(icu_dtformat,<span class="string">'yyy'</span>,<span class="string">'yy'</span>);
4050293                     <span class="keyword">end</span>
4060294                 <span class="keyword">end</span>
4070295                 y = dtstr2dtvecmx(t,icu_dtformat,pivotyear);
4080296             <span class="keyword">end</span>
4090297             <span class="keyword">if</span> nargout &gt; 1
4100298                 mo = y(:,2);
4110299                 d  = y(:,3);
4120300                 h  = y(:,4);
4130301                 mi = y(:,5);
4140302                 s  = y(:,6);
4150303                 y  = y(:,1);
4160304             <span class="keyword">end</span>
4170305         <span class="keyword">catch</span>
4180306             err = lasterror;
4190307             err.identifier = <span class="string">'MATLAB:datevec:dtstr2dtvecmx'</span>;
4200308             err.message = sprintf([<span class="string">'DATEVEC failed, calling DTSTR2DTVECMX.\n'</span><span class="keyword">...</span><span class="comment"> </span>
4210309                     <span class="string">'%s'</span>],err.message);
4220310             rethrow(err);
4230311         <span class="keyword">end</span> 
4240312     <span class="keyword">else</span>
4250313         <span class="comment">%last resort!!!</span>
4260314        <span class="keyword">if</span> ischar(t)
4270315           m = size(t,1);
4280316        <span class="keyword">else</span>
4290317           m = length(t);
4300318        <span class="keyword">end</span>
4310319        y = zeros(m,6);
4320320        t = lower(t);
4330321 <span class="comment">%        ampmtokens = lower(getampmtokensmx);</span>
4340322         amtok = <span class="string">'am'</span>; <span class="comment">%ampmtokens{1};</span>
4350323        amtok0 = <span class="string">'am'</span>;
4360324         pmtok = <span class="string">'pm'</span>;<span class="comment">%ampmtokens{2};</span>
4370325        pmtok0 = <span class="string">'pm'</span>;
4380326        M={<span class="string">'jan'</span>;<span class="string">'feb'</span>;<span class="string">'mar'</span>;<span class="string">'apr'</span>;<span class="string">'may'</span>;<span class="string">'jun'</span>;<span class="string">'jul'</span>;<span class="string">'aug'</span>;<span class="string">'sept'</span>;<span class="string">'oct'</span>;<span class="string">'nov'</span>;<span class="string">'dec'</span>};
4390327        M0=M;
4400328 <span class="comment">%        M = lower(getmonthnames);</span>
4410329 <span class="comment">%        M0 = lower(getmonthnames(0)); % fall-back list of English short month names.</span>
4420330        <span class="keyword">try</span>
4430331            <span class="keyword">for</span> i = 1:m
4440332                <span class="comment">% Convert date input to date vector</span>
4450333                <span class="comment">% Initially, the six fields are all unknown.</span>
4460334                c(1,1:6) = NaN;
4470335                pm = -1; <span class="comment">% means am or pm is not in datestr</span>
4480336                <span class="keyword">if</span> ischar(t)
4490337                    str = t(i,:);
4500338                <span class="keyword">else</span>
4510339                    str = t{i};
4520340                <span class="keyword">end</span>
4530341                d = [<span class="string">' '</span> str <span class="string">' '</span>];
4540342
4550343                <span class="comment">% Replace 'a ' or 'am', 'p ' or 'pm' with ': '.</span>
4560344                p = max(find(d == amtok(1) | d == pmtok(1) | <span class="keyword">...</span>
4570345                             d == amtok0(1)| d == pmtok0(1)));
4580346                <span class="keyword">if</span> ~isempty(p)
4590347                    <span class="keyword">if</span> (d(p+1) == amtok(2) | <span class="keyword">...</span>
4600348                        d(p+1) == amtok0(2)| isspace(d(p+1))) &amp; <span class="keyword">...</span>
4610349                        d(p-1) ~= lower(<span class="string">'e'</span>)
4620350                        pm = (d(p) == pmtok(1) | d(p) == pmtok0(1));
4630351                        <span class="keyword">if</span> d(p-1) == <span class="string">' '</span>
4640352                            d(p-1:p+1) = <span class="string">':  '</span>;
4650353                        <span class="keyword">else</span>
4660354                            d(p:p+1) = <span class="string">': '</span>;
4670355                        <span class="keyword">end</span>
4680356                    <span class="keyword">end</span>
4690357                <span class="keyword">end</span>
4700358
4710359                <span class="comment">% Any remaining letters must be in the month field</span>
4720360                p = find(isletter(d));
4730361
4740362                <span class="comment">% Test length of string to catch a bogus date string.</span>
4750363                <span class="comment">% Get index of month in list of months of year</span>
4760364                <span class="comment">% replace with spaces, month name in date string.</span>
4770365                <span class="comment">% If native month name lookup fails, fall back on</span>
4780366                <span class="comment">% list of English month names.</span>
4790367                <span class="keyword">if</span> ~isempty(p) &amp;&amp; numel(d)&gt;4
4800368                    k = min(p);
4810369                    <span class="keyword">if</span> d(k+3) == <span class="string">'.'</span>, d(k+3) = <span class="string">' '</span>; <span class="keyword">end</span>
4820370                    monthidx = ~cellfun(<span class="string">'isempty'</span>,strfind(M,d(k:k+2)));
4830371                    <span class="keyword">if</span> ~any(monthidx)
4840372                        monthidx = ~cellfun(<span class="string">'isempty'</span>,strfind(M0,d(k:k+2)));
4850373                        <span class="keyword">if</span> ~any(monthidx)
4860374 <span class="comment">%                            error('MATLAB:datevec:MonthOfYear',...</span>
4870375 <span class="comment">%                                'Failed to lookup month of year.');</span>
4880376                           <span class="keyword">return</span>
4890377                        <span class="keyword">end</span>
4900378                    <span class="keyword">end</span>
4910379                    c(2) = find(monthidx);
4920380                    d(p) = char(<span class="string">' '</span>*ones(size(p)));
4930381                <span class="keyword">end</span>
4940382
4950383                <span class="comment">% Find all nonnumbers.</span>
4960384                p = find((d &lt; <span class="string">'0'</span> | d &gt; <span class="string">'9'</span>) &amp; (d ~= <span class="string">'.'</span>));
4970385
4980386                <span class="comment">% Pick off and classify numeric fields, one by one.</span>
4990387                <span class="comment">% Colons delinate hour, minutes and seconds.</span>
5000388
5010389                k = 1;
5020390                <span class="keyword">while</span> k &lt; length(p)
5030391                    <span class="keyword">if</span> d(p(k)) ~= <span class="string">' '</span> &amp;&amp; d(p(k)+1) == <span class="string">'-'</span>
5040392                        f = str2double(d(p(k)+1:p(k+2)-1));
5050393                        k = k+1;
5060394                    <span class="keyword">else</span>
5070395                        f = str2double(d(p(k)+1:p(k+1)-1));
5080396                    <span class="keyword">end</span>
5090397                    <span class="keyword">if</span> ~isnan(f)
5100398                        <span class="keyword">if</span> d(p(k))==<span class="string">':'</span> || d(p(k+1))==<span class="string">':'</span>
5110399                            <span class="keyword">if</span> isnan(c(4))
5120400                                c(4) = f;             <span class="comment">% hour</span>
5130401                                <span class="comment">% Add 12 if pm specified and hour isn't 12</span>
5140402                                <span class="keyword">if</span> pm == 1 &amp;&amp; f ~= 12
5150403                                    c(4) = f+12;
5160404                                <span class="keyword">elseif</span> pm == 0 &amp;&amp; f == 12
5170405                                    c(4) = 0;
5180406                                <span class="keyword">end</span>
5190407                            <span class="keyword">elseif</span> isnan(c(5))
5200408                                c(5) = f;             <span class="comment">% minutes</span>
5210409                            <span class="keyword">elseif</span> isnan(c(6))
5220410                                c(6) = f;             <span class="comment">% seconds</span>
5230411                            <span class="keyword">else</span>
5240412 <span class="comment">%                                error('MATLAB:datevec:NumberOfTimeFields',...</span>
5250413 <span class="comment">%                                    'Too many time fields in %s', str);</span>
5260414                                 <span class="keyword">return</span>
5270415                            <span class="keyword">end</span>
5280416                        <span class="keyword">elseif</span> isnan(c(2))
5290417                            <span class="keyword">if</span> f &gt; 12
5300418 <span class="comment">%                                error('MATLAB:datevec:IllegalDateField',...</span>
5310419 <span class="comment">%                                    '%s is too large to be a month.',num2str(f));</span>
5320420                                 <span class="keyword">return</span>
5330421                            <span class="keyword">end</span>
5340422                            c(2) = f;                <span class="comment">% month</span>
5350423                        <span class="keyword">elseif</span> isnan(c(3))
5360424                            c(3) = f;                <span class="comment">% date</span>
5370425                        <span class="keyword">elseif</span> isnan(c(1))
5380426                            <span class="keyword">if</span> (f &gt;= 0) &amp; (p(k+1)-p(k) == 3) <span class="comment">% two char year</span>
5390427                                <span class="keyword">if</span> nargin &lt; 2
5400428                                    clk = clock;
5410429                                    pivotyear = clk(1)-50;  <span class="comment">%(current year-50 years)</span>
5420430                                <span class="keyword">end</span>
5430431                                <span class="comment">% Moving 100 year window centered around current year</span>
5440432                                c(1) = pivotyear+rem(f+100-rem(pivotyear,100),100);
5450433                            <span class="keyword">else</span>
5460434                                c(1) = f;             <span class="comment">% year</span>
5470435                            <span class="keyword">end</span>
5480436                        <span class="keyword">else</span>
5490437 <span class="comment">%                            error('MATLAB:datevec:NumberOfDateFields',...</span>
5500438 <span class="comment">%                                'Too many date fields in %s', str);</span>
5510439                             <span class="keyword">return</span>
5520440                        <span class="keyword">end</span>
5530441                    <span class="keyword">end</span>
5540442                    k = k+1;
5550443                <span class="keyword">end</span>
5560444
5570445                <span class="keyword">if</span> sum(isnan(c)) &gt;= 5
5580446 <span class="comment">%                    error('MATLAB:datevec:ParseDateString',...</span>
5590447 <span class="comment">%                        'Cannot parse date %s', str);</span>
5600448                     <span class="keyword">return</span>
5610449                <span class="keyword">end</span>
5620450               <span class="comment">% If any field has not been specified</span>
5630451                <span class="keyword">if</span> isnan(c(1)), clk = clock; c(1) = clk(1); <span class="keyword">end</span>
5640452                <span class="keyword">if</span> isnan(c(2)), c(2) = 1; <span class="keyword">end</span>;
5650453                <span class="keyword">if</span> isnan(c(3)), c(3) = 1; <span class="keyword">end</span>;
5660454                <span class="keyword">if</span> isnan(c(4)), c(4) = 0; <span class="keyword">end</span>;               
5670455                <span class="keyword">if</span> isnan(c(5)), c(5) = 0; <span class="keyword">end</span>;                   
5680456                <span class="keyword">if</span> isnan(c(6)), c(6) = 0; <span class="keyword">end</span>;
5690457
5700458                <span class="comment">% Normalize components to correct ranges.</span>
5710459                y(i,:) = datevecmx(datenummx(c));
5720460            <span class="keyword">end</span>
5730461        <span class="keyword">catch</span>
5740462            err = lasterror;
5750463            err.message = sprintf(<span class="string">'Failed to parse date string.\n%s'</span>,<span class="keyword">...</span>
5760464                                  err.message);
5770465            rethrow(err);
5780466        <span class="keyword">end</span> 
5790467        <span class="keyword">if</span> nargout &gt; 1
5800468            mo = y(:,2);
5810469            d  = y(:,3);
5820470            h  = y(:,4);
5830471            mi = y(:,5);
5840472            s  = y(:,6);
5850473            y  = y(:,1);
5860474        <span class="keyword">end</span>
5870475     <span class="keyword">end</span>
5880476 <span class="keyword">elseif</span> nargout &lt;= 1
5890477    <span class="comment">% date number was specified</span>
5900478    y = datevecmx(t);
5910479 <span class="keyword">elseif</span> nargout == 3
5920480     <span class="comment">% date number was specified and first three date fields for output</span>
5930481    [y,mo,d] = datevecmx(t);
5940482 <span class="keyword">else</span>
5950483    <span class="comment">% date number was specified and all six date fields for output</span>
5960484    [y,mo,d,h,mi,s] = datevecmx(t);
5970485 <span class="keyword">end</span>
5980486 <span class="keyword">end</span>
5990487 <span class="comment">%--------------------------------------------------------------------------</span>
6000488 <span class="comment">%--</span>
6010489 <a name="_sub2" href="#_subfunctions" class="code">function [format] = getformat(str)</a>
6020490   format = <span class="string">''</span>;
6030491   formatstr = cell(11,1);
6040492   formatstr(1) = {<span class="string">'dd-mmm-yyyy HH:MM:SS'</span>};
6050493   formatstr(2) = {<span class="string">'dd-mmm-yyyy'</span>};
6060494   formatstr(3) = {<span class="string">'mm/dd/yy'</span>};
6070495   formatstr(4) = {<span class="string">'mm/dd'</span>};
6080496   formatstr(5) = {<span class="string">'HH:MM:SS'</span>};
6090497   formatstr(6) = {<span class="string">'HH:MM:SS PM'</span>};
6100498   formatstr(7) = {<span class="string">'HH:MM'</span>};
6110499   formatstr(8) = {<span class="string">'HH:MM PM'</span>};
6120500   formatstr(9) = {<span class="string">'mm/dd/yyyy'</span>};
6130501   formatstr(10) = {<span class="string">'dd-mmm-yyyy HH:MM'</span>};  <span class="comment">%used by finance</span>
6140502   formatstr(11) = {<span class="string">'dd-mmm-yy'</span>};  <span class="comment">%used by finance</span>
6150503   
6160504   AlphaFormats = [1 1 0 0 0 1 0 1 0 1 1];
6170505   <span class="comment">%[1 2 6 8 10 11];</span>
6180506   SlashFormats = [ 0 0 1 1 0 0 0 0 1 0 0];
6190507   <span class="comment">%[3 4 9];</span>
6200508   TwoSlashFormats = [ 0 0 1 0 0 0 0 0 1 0 0];
6210509   <span class="comment">%[3 9];</span>
6220510   DashFormats = [ 1 1 0 0 0 0 0 0 0 1 1];
6230511   <span class="comment">%[1 2 10 11];</span>
6240512   ColonFormats = [1 0 0 0 1 1 1 1 0 1 0];
6250513   <span class="comment">%[1 5 6 7 8 10];</span>
6260514   TwoColonFormats = [1 0 0 0 1 1 0 0 0 0 0];
6270515   <span class="comment">%[1 5 6];</span>
6280516   SpaceFormats = [1 0 0 0 0 1 0 1 0 1 0];
6290517   <span class="comment">%[1 6 8 10];</span>
6300518   
6310519   bMask = [ 1 1 1 1 1 1 1 1 1 1 1];
6320520   
6330521   <span class="keyword">if</span> length(str) &gt; 1
6340522       str = str(1,1);
6350523   <span class="keyword">end</span>
6360524   str = strtrim(char(str));
6370525   slashes = strfind(str, <span class="string">'/'</span>);
6380526   <span class="keyword">if</span> ~isempty(slashes)
6390527       bMask = bMask &amp; SlashFormats;
6400528       <span class="keyword">if</span> (length(slashes) &gt; 0 &amp;&amp; slashes(1) == 2)
6410529           <span class="keyword">if</span> (length(slashes) &gt; 1 &amp;&amp; slashes(2) == 4)
6420530               str = [<span class="string">'0'</span> str(1:slashes(1)) <span class="string">'0'</span> str(slashes(1)+1:end)];
6430531           <span class="keyword">else</span>
6440532               str = [<span class="string">'0'</span> str];
6450533           <span class="keyword">end</span>
6460534       <span class="keyword">elseif</span> (length(slashes) &gt; 1 &amp;&amp; slashes(2) - slashes(1) == 2)
6470535           str = [str(1:slashes(1)) <span class="string">'0'</span> str(slashes(1)+1:end)];
6480536       <span class="keyword">end</span>
6490537       <span class="keyword">if</span> length(slashes) &gt; 1
6500538           bMask = bMask &amp; TwoSlashFormats;
6510539       <span class="keyword">else</span>
6520540           bMask = bMask &amp; ~TwoSlashFormats;
6530541       <span class="keyword">end</span>
6540542   <span class="keyword">else</span>
6550543       bMask = bMask &amp; ~SlashFormats;
6560544   <span class="keyword">end</span>
6570545   
6580546   dashes = strfind(str,<span class="string">'-'</span>);
6590547   <span class="keyword">if</span> ~isempty(dashes)
6600548       bMask = bMask &amp; DashFormats;
6610549       <span class="keyword">if</span> (length(dashes) &gt; 0 &amp;&amp; dashes(1) == 2)
6620550         str = [<span class="string">'0'</span> str];
6630551       <span class="keyword">end</span>
6640552   <span class="keyword">else</span>
6650553       bMask = bMask &amp; ~DashFormats;     
6660554   <span class="keyword">end</span>
6670555   
6680556   colons = strfind(str,<span class="string">':'</span>);
6690557   <span class="keyword">if</span> ~isempty(colons)
6700558       bMask = bMask &amp; ColonFormats;
6710559       <span class="keyword">if</span> (length(colons) &gt; 0) &amp;&amp; (colons(1) == 2) &amp;&amp; (length(str) - colons(end) &gt; 3)
6720560         str = [<span class="string">'0'</span> str];
6730561       <span class="keyword">end</span>
6740562       <span class="keyword">if</span> length(colons) &gt; 1
6750563           bMask = bMask &amp; TwoColonFormats;
6760564       <span class="keyword">else</span>
6770565           bMask = bMask &amp; ~TwoColonFormats;
6780566       <span class="keyword">end</span>     
6790567   <span class="keyword">else</span>
6800568       bMask = bMask &amp; ~ColonFormats;
6810569   <span class="keyword">end</span>     
6820570   
6830571   spaces = strfind(str,<span class="string">' '</span>);
6840572   <span class="keyword">if</span> ~isempty(spaces)
6850573       bMask = bMask &amp; SpaceFormats;
6860574   <span class="keyword">else</span>
6870575       bMask = bMask &amp; ~SpaceFormats;
6880576   <span class="keyword">end</span>
6890577   
6900578   <span class="keyword">for</span> i = 1:11
6910579       <span class="keyword">if</span> bMask(i)
6920580           <span class="keyword">try</span>
6930581               str1 = dateformverify(str,char(formatstr(i)));
6940582             <span class="keyword">if</span> (strcmpi(str, strtrim(str1)) == 1)
6950583                 format = char(formatstr(i));
6960584                 <span class="keyword">break</span>;
6970585             <span class="keyword">end</span>
6980586           <span class="keyword">catch</span>
6990587                lasterr(<span class="string">''</span>);
7000588           <span class="keyword">end</span>
7010589           <span class="keyword">if</span> AlphaFormats(i)
7020590               <span class="keyword">try</span>
7030591                 str1 = dateformverify(str,char(formatstr(i)),<span class="string">'local'</span>);
7040592                 <span class="keyword">if</span> (strcmpi(str, strtrim(str1)) == 1)
7050593                     format = char(formatstr(i));
7060594                     <span class="keyword">break</span>;
7070595                 <span class="keyword">end</span>
7080596               <span class="keyword">catch</span>
7090597                 lasterr(<span class="string">''</span>);
7100598               <span class="keyword">end</span>       
7110599           <span class="keyword">end</span>
7120600       <span class="keyword">end</span>
7130601   <span class="keyword">end</span>
7140602  <span class="keyword">end</span></pre></div>
715<hr><address>Generated on Fri 13-Nov-2009 11:17:03 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
716</body>
717</html>
Note: See TracBrowser for help on using the repository browser.