Abstracted common "time ago" date string parsing logic

This commit is contained in:
unknown
2015-07-22 23:16:13 -06:00
parent bb32831e9f
commit 15ee194035
8 changed files with 54 additions and 135 deletions

View File

@@ -14,5 +14,43 @@ namespace Jackett.Utils
long unixTimeStampInTicks = (long)(unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks);
}
// ex: "2 hours 1 day"
public static DateTime FromTimeAgo(string str)
{
str = str.ToLowerInvariant();
if (str.Contains("now"))
{
return DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
}
var dateParts = str.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
TimeSpan timeAgo = TimeSpan.Zero;
for (var i = 0; i < dateParts.Length / 2; i++)
{
var val = ParseUtil.CoerceFloat(dateParts[i * 2]);
var unit = dateParts[i * 2 + 1];
if (unit.Contains("sec"))
timeAgo += TimeSpan.FromSeconds(val);
else if (unit.Contains("min"))
timeAgo += TimeSpan.FromMinutes(val);
else if (unit.Contains("hour"))
timeAgo += TimeSpan.FromHours(val);
else if (unit.Contains("day"))
timeAgo += TimeSpan.FromDays(val);
else if (unit.Contains("week"))
timeAgo += TimeSpan.FromDays(val * 7);
else if (unit.Contains("month"))
timeAgo += TimeSpan.FromDays(val * 30);
else if (unit.Contains("year"))
timeAgo += TimeSpan.FromDays(val * 365);
else
{
throw new Exception("TimeAgo parsing failed");
}
}
return DateTime.SpecifyKind(DateTime.Now - timeAgo, DateTimeKind.Local);
}
}
}