public void EvaluateFormat(object current, Core.Parsing.Format format, ref bool handled, IOutput output, FormatDetails formatDetails) { if (format != null && format.HasNested) { return; } var formatText = format != null ? format.Text : ""; TimeSpan fromTime; if (current is TimeSpan) { fromTime = (TimeSpan)current; } else if (current is DateTime && formatText.StartsWith("timestring")) { formatText = formatText.Substring(10); fromTime = DateTime.Now.Subtract((DateTime)current); } else { return; } var timeTextInfo = GetTimeTextInfo(formatDetails.Provider); if (timeTextInfo == null) { return; } var formattingOptions = TimeSpanFormatOptionsConverter.Parse(formatText); var timeString = TimeSpanUtility.ToTimeString(fromTime, formattingOptions, timeTextInfo); output.Write(timeString, formatDetails); handled = true; }
public bool TryEvaluateFormat(IFormattingInfo formattingInfo) { var format = formattingInfo.Format; var current = formattingInfo.CurrentValue; if (format != null && format.HasNested) { return(false); } string options; if (formattingInfo.FormatterOptions != "") { options = formattingInfo.FormatterOptions; } else if (format != null) { options = format.GetLiteralText(); } else { options = ""; } TimeSpan fromTime; if (current is TimeSpan) { fromTime = (TimeSpan)current; } else if (current is DateTime && formattingInfo.FormatterOptions != "") { fromTime = DateTime.Now.Subtract((DateTime)current); } else if (current is DateTime && options.StartsWith("timestring")) { options = options.Substring(10); fromTime = DateTime.Now.Subtract((DateTime)current); } else { return(false); } var timeTextInfo = GetTimeTextInfo(formattingInfo.FormatDetails.Provider); if (timeTextInfo == null) { return(false); } var formattingOptions = TimeSpanFormatOptionsConverter.Parse(options); var timeString = fromTime.ToTimeString(formattingOptions, timeTextInfo); formattingInfo.Write(timeString); return(true); }
public bool TryEvaluateFormat(IFormattingInfo formattingInfo) { var format = formattingInfo.Format; var current = formattingInfo.CurrentValue; if (format != null && format.HasNested) { return(false); } string options; if (formattingInfo.FormatterOptions != "") { options = formattingInfo.FormatterOptions; } else if (format != null) { options = format.GetLiteralText(); } else { options = ""; } TimeSpan fromTime; switch (current) { case TimeSpan timeSpan: fromTime = timeSpan; break; case DateTime dateTime: if (formattingInfo.FormatterOptions != "") { fromTime = SystemTime.Now().ToUniversalTime().Subtract(dateTime.ToUniversalTime()); } else { return(false); } break; case DateTimeOffset dateTimeOffset: if (formattingInfo.FormatterOptions != "") { fromTime = SystemTime.OffsetNow().UtcDateTime.Subtract(dateTimeOffset.UtcDateTime); } else { return(false); } break; default: return(false); } var timeTextInfo = GetTimeTextInfo(formattingInfo.FormatDetails.Provider); if (timeTextInfo == null) { return(false); } var formattingOptions = TimeSpanFormatOptionsConverter.Parse(options); var timeString = fromTime.ToTimeString(formattingOptions, timeTextInfo); formattingInfo.Write(timeString); return(true); }