/* parse args for UTC functions, return date/time series and timezone */
utc_parse_args(date, time, timezone, def_local = TRUE, convert_localstr = TRUE)
{
local isstring = FALSE, d, t;
if (not(isstring(timezone)))
{
error(sprintf("%s - unrecognized timezone", __CALLER__));
}
if (isarray(date))
{
if (isdatestr(time))
{
/* assume startdate */
startdate = time;
}
else if (isstring(time) && not(istimestr(time)))
{
/* assume timezone */
timezone = time;
}
if (numcols(date) > 1 && (isempty(time) || not(isarray(time))))
{
time = date[.., 2..2..end];
date = date[.., 1..2..end];
}
}
if (isstring(date) && (isempty(time) || isstring(time)))
{
/* parse strings */
isstring = TRUE;
d = def_local ? getdate() : getutcdate();
t = def_local ? gettime(13) : getutctime(13);
/* date parse */
if (isdatestr(date))
{
d = date;
date = "";
}
else if (isdatestr(time))
{
d = time;
time = "";
}
else if (isdatestr(timezone))
{
d = timezone;
timezone = "";
}
/* time parse */
if (istimestr(date))
{
t = date;
date = "";
}
else if (istimestr(time))
{
t = time;
time = "";
}
else if (istimestr(timezone))
{
t = timezone;
timezone = "";
}
if (strlen(date) > 0)
{
if (strlen(timezone) == 0)
{
timezone = date;
d = def_local ? getdate() : getutcdate();
}
else
{
error(sprintf("%s - unrecognized date '%s'", __CALLER__, date));
}
}
/* convert to series */
date = {julstr(d)};
if (isarray(time) && isempty(time))
{
t = {};
}
else if (strlen(time) > 0)
{
if (strlen(timezone) == 0)
{
timezone = time;
t = def_local ? gettime(13) : getutctime(13);
}
else
{
error(sprintf("%s - unrecognized time '%s'", __CALLER__, time));
}
}
if (not(isempty(t)))
{
/* convert to series */
time = {todmsecstr(t)};
}
}
else if (isstring(date))
{
if (isdatestr(date))
{
date = {julstr(date)};
date = rep(date, length(time));
}
else if (istimestr(date))
{
d = time;
time = {todmsecstr(date)};
time = rep(time, length(d));
date = d;
}
else if (strlen(timezone) == 0)
{
d = def_local ? getdate() : getutcdate();
timezone = date;
date = {julstr(d)};
date = rep(date, length(time));
}
else
{
error(sprintf("%s - unrecognized date '%s'", __CALLER__, date));
}
}
else if (isstring(time))
{
if (isdatestr(time))
{
d = {julstr(time)};
time = date;
date = rep(d, length(time));
}
else if (istimestr(time))
{
time = {todmsecstr(time)};
time = rep(time, length(time));
}
else if (strlen(timezone) == 0)
{
t = def_local ? gettime(13) : getutctime(13);
timezone = time;
time = {todmsecstr(t)};
time = rep(time, length(date));
}
else
{
error(sprintf("%s - unrecognized time '%s'", __CALLER__, time));
}
}
if (isscalar(date))
{
if (isscalar(time))
{
time = {time};
}
date = {date};
}
else if (isscalar(time))
{
time = {time};
}
/* time zone additions */
if (convert_localstr)
{
if (tolower(timezone) == "local")
{
timezone = "";
}
}
if (tolower(timezone) == "z")
{
timezone = "Etc/UTC";
}
return(date, time, timezone, isstring);
}