/// <summary> /// /// </summary> /// <returns></returns> public static string GetTimeAxeLabelFormat(Range r) { var from = DateTimeMathParser.ToDateTime(r.From, false).Value; var to = DateTimeMathParser.ToDateTime(r.To, true).Value; var diff = to - from; if (diff <= TimeSpan.FromMinutes(5)) { return(AXES_LABEL_FORMAT0); } if (diff <= TimeSpan.FromHours(24)) { return(AXES_LABEL_FORMAT1); } if (diff <= TimeSpan.FromDays(7)) { return(AXES_LABEL_FORMAT2); } if (diff <= TimeSpan.FromDays(365)) { return(AXES_LABEL_FORMAT3); } return(AXES_LABEL_FORMAT4); }
/// <summary> /// /// </summary> /// <param name="time"></param> /// <param name="shift"></param> /// <returns></returns> public static Range Shift(Range time, string shift) { var shiftedAbsTime = $"{NOW}-{shift}"; var shiftedAbsTimeInMs = (( DateTimeOffset )DateTimeMathParser .ToDateTime(shiftedAbsTime)) .ToUnixTimeMilliseconds(); var nowInMs = (( DateTimeOffset )DateTime.Now).ToUnixTimeMilliseconds(); var shiftInMs = nowInMs - shiftedAbsTimeInMs; var tf = DateTimeMathParser .ToDateTime(time.From, false) .Value .AddMilliseconds(-shiftInMs); var tt = DateTimeMathParser .ToDateTime(time.To, true) .Value .AddMilliseconds(-shiftInMs); return(new Range( tf.ToString(DateTimeMathParser.DEFAULT_DATE_TIME_FORMAT), tt.ToString(DateTimeMathParser.DEFAULT_DATE_TIME_FORMAT))); }
/// <summary> /// /// </summary> /// <param name="r"></param> /// <returns></returns> public static string ToLabel(Range range) { var quickKey = ToLabel(range.From, range.To); _dictQuickRanges.TryGetValue(quickKey, out Range option); if (null != option) { return(option.Display); } if (IsDateTime(range.From) && IsDateTime(range.To)) { return(ToLabel(Format(range.From), Format(range.To))); } if (IsDateTime(range.From)) { var to = DateTimeMathParser.ToDateTime(range.To, true); return(to.HasValue ? ToLabel(Format(range.From), to.Value.FromNow()) : string.Empty); } if (IsDateTime(range.To)) { var from = DateTimeMathParser.ToDateTime(range.From, false); return(from.HasValue ? ToLabel(from.Value.FromNow(), Format(range.To)) : string.Empty); } if (range.To == NOW) { return(ToRange(range.From).Display); } return(quickKey); }
/// <summary> /// /// </summary> /// <param name="range"></param> /// <returns></returns> public static bool IsAbsoluteTimeRange(Range range) { if (null == range) { return(false); } return ((!DateTimeMathParser.IsMathString(range.From)) || (!DateTimeMathParser.IsMathString(range.To))); }
/// <summary> /// /// </summary> /// <param name="text"></param> /// <param name="roundUp"></param> /// <param name="timezone"></param> /// <returns></returns> public static DateTime?ToDateTime(string text, bool?roundUp = null, Timezone timezone = Timezone.Browser) { if (string.IsNullOrEmpty(text) || text.Length < NOW.Length) { return(null); } if (DateTimeMathParser.IsDateTime(text, out DateTime absTime)) { return(absTime); } DateTime time = DateTime.Now; var mathString = string.Empty; var index = 0; if (text.Substring(0, NOW.Length) == NOW) { time = timezone == Timezone.UTC ? DateTime.UtcNow : DateTime.Now; mathString = text.Substring(NOW.Length); } else { index = text.IndexOf("||"); var parseString = string.Empty; if (-1 == index) { parseString = text; mathString = string.Empty; } else { parseString = text.Substring(0, index); mathString = text.Substring(index + 2); } // We're going to just require ISO8601 timestamps, k? //time = this.dateTime( parseString, ISO_8601 ); //?? return(null); } return(ShiftDateTime(mathString, time, roundUp)); }
/// <summary> /// /// </summary> /// <param name="text"></param> /// <returns></returns> private static bool IsDateTime(string text) => DateTimeMathParser.IsDateTime(text);