0001 function varargout = timespan(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 VERSION = '$Id: timespan.m,v 1.10 2007/10/16 17:37:21 ingo Exp $';
0029
0030
0031
0032 function t_span = init
0033 t_span.name = 'time span-object';
0034 t_span.start = time();
0035 t_span.end = time();
0036 t_span.timeformat = t_span.start.timeformat;
0037 t_span.interval = '';
0038 t_span.timezone = t_span.start.timezone;
0039 t_span.created = time();
0040 t_span.version = VERSION;
0041
0042 t_span = class (t_span, 'timespan');
0043 end
0044
0045
0046
0047
0048 if nargin == 0
0049
0050 t_span = init;
0051
0052 elseif nargin == 1
0053
0054
0055 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0056 tf = fromxml(varargin{1});
0057 varargout{1} = tf;
0058 elseif ischar(varargin{1})
0059
0060 filename = varargin{1};
0061 [path, name, ext, vers] = fileparts(filename);
0062 switch ext
0063 case '.mat'
0064 t_span = load(filename);
0065 case '.xml'
0066 t_span = xmlparse(timespan, filename);
0067 otherwise
0068 error('### Unknown file type.');
0069 end
0070
0071 varargout{1} = t_span;
0072
0073
0074 elseif isstruct(varargin{1})
0075
0076 t_span = init();
0077
0078 fields = fieldnames(varargin{1});
0079 for ii = 1:length(fields)
0080 field = fields{ii};
0081
0082 if strcmp(field, 'start')
0083 start_t = varargin{1}.start;
0084 if isstruct(start_t)
0085 start_t = time(start_t);
0086 end
0087 t_span.start = start_t;
0088
0089 elseif strcmp(field, 'end')
0090 end_t = varargin{1}.end;
0091 if isstruct(end_t)
0092 end_t = time(end_t);
0093 end
0094 t_span.end = end_t;
0095
0096 elseif strcmp(field, 'timeformat')
0097 tf = varargin{1}.timeformat;
0098 if isstruct(tf)
0099 tf = timeformat(tf);
0100 end
0101 t_span.timeformat = tf;
0102
0103 else
0104 try
0105 t_span.(field) = varargin{1}.(field);
0106 catch
0107 error('### The field ''%s'' in the struct is not a timespan property.', field)
0108 end
0109 end
0110 end
0111
0112 varargout{1} = t_span;
0113
0114 else
0115 error ('### Unknown constructor');
0116 end
0117
0118 elseif nargin == 2
0119
0120
0121 if ischar(varargin{1}) && ischar(varargin{2})
0122
0123 t_span = init;
0124 t_span.start = time(varargin{1});
0125 t_span.end = time(varargin{2});
0126
0127
0128 t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0129 t_span = set(t_span, 'timezone', t_span.start.timezone);
0130
0131
0132 t_span = compute_interval(t_span);
0133
0134
0135 elseif isa(varargin{1}, 'database')
0136
0137 t_span = retrieve(varargin{1}, varargin{2:end});
0138
0139
0140 elseif isa(varargin{1}, 'time') && isa(varargin{2}, 'time')
0141
0142 t_span = init;
0143 t_span.start = varargin{1};
0144 t_span.end = varargin{2};
0145
0146
0147 t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0148 t_span = set(t_span, 'timezone', t_span.start.timezone);
0149
0150
0151 t_span = compute_interval(t_span);
0152
0153
0154 elseif isa(varargin{1}, 'time') && ischar(varargin{2})
0155
0156 t_span = init;
0157 t_span.start = varargin{1};
0158 t_span.end = time(varargin{2}, char(t_span.start.timeformat));
0159
0160
0161 t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0162 t_span = set(t_span, 'timezone', t_span.start.timezone);
0163
0164
0165 t_span = compute_interval(t_span);
0166
0167
0168 elseif ischar(varargin{1}) && isa(varargin{2}, 'time')
0169
0170 t_span = init;
0171 t_span.end = varargin{2};
0172 t_span.start = time(varargin{1}, char(t_span.end.timeformat));
0173
0174
0175 t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0176 t_span = set(t_span, 'timezone', t_span.start.timezone);
0177
0178
0179 t_span = compute_interval(t_span);
0180
0181 else
0182 error (' ### Unknown constructor.');
0183
0184 end
0185
0186 elseif nargin == 3
0187
0188
0189 if ischar(varargin{1}) && ischar(varargin{2}) && ischar(varargin{3})
0190
0191 t_span = init;
0192 t_span.start = time(varargin{1}, varargin{3});
0193 t_span.end = time(varargin{2}, varargin{3});
0194 t_span.timeformat = t_span.start.timeformat;
0195
0196
0197 t_span = compute_interval(t_span);
0198
0199 elseif isa(varargin{1}, 'time') && isa(varargin{2}, 'time') && isa(varargin{3}, 'timeformat')
0200
0201 t_span = init;
0202 t_span.start = varargin{1};
0203 t_span.end = varargin{2};
0204 t_span.timeformat = varargin{3};
0205
0206 t_span.start = set(t_span.start, 'timeformat', t_span.timeformat);
0207 t_span.end = set(t_span.end, 'timeformat', t_span.timeformat);
0208
0209
0210 t_span = compute_interval(t_span);
0211
0212 else
0213 error (' ### Unknown constructor.');
0214
0215 end
0216
0217 else
0218
0219 error ('### Unknown number of inputs');
0220
0221 end
0222
0223 if t_span.start.utc_epoch_milli > t_span.end.utc_epoch_milli
0224 error('### The start time is larger than the end time.');
0225 end
0226
0227 varargout{1} = t_span;
0228
0229
0230 end