private ZDateTime ParseJustTime(string sdate, List <DateToken> tokens, ZTimeZone zone) { DateInfo idate = new DateInfo(); ParseTime(sdate, ref idate, tokens, 0); return(CreateTime(ref idate, zone)); }
// Implementation private ZDateTime ParseDateTime(string sdate, List <DateToken> tokens, ZTimeZone default_zone) { var len = tokens.Count; if (len < 1) { throw new ArgumentException("failed to parse date, as unknown form: " + sdate); } // special-case, may be a timestamp var first = tokens[0]; if (len == 1 && first.Type == DateToken.TType.NUMERIC) { long stamp = (long)first; // determine whether YYYYMMDD date or whether timestamp if (stamp > 19000000 && stamp < 90000000) { return(new ZDateTime((int)(stamp / 10000), (int)(stamp / 100) % 100, (int)stamp % 100, 0, 0, 0, 0, default_zone)); } else { return(new ZDateTime(stamp, default_zone)); } } // otherwise straight date-time else { DateInfo idate = new DateInfo(); int Itime = ParseDate(sdate, ref idate, tokens); ParseTime(sdate, ref idate, tokens, Itime); if (idate.Zone == null) { idate.Zone = default_zone; } return(CreateDateTime(ref idate)); } }
/** * Create time from given info, relative to current date */ private ZDateTime CreateTime(ref DateInfo info, ZTimeZone zone) { ZDateTime now = ZDateTime.TimeNowFor(zone); return(new ZDateTime(now.Year, now.Month, Math.Max(now.Day, 1), info.Hours, info.Minutes, info.Seconds, info.Milliseconds, info.Zone)); }
// Functions /// <summary> /// Parse date/time string /// </summary> /// <param name='sdate'> /// date. /// </param> /// <param name='default_zone'> /// default time zone /// </param> public ZDateTime Parse(string sdate, ZTimeZone default_zone) { List <DateToken> tokens = _lexer.Parse(sdate); return(ParseDateTime(sdate, tokens, default_zone)); }