我可以使用哪个库来根据日期表达式计算日期?
日期表达式类似于:
示例:
DateTime EstimatedArrivalDate = CalcDate("+3D", DateTime.Now);
预计到达日期等于当前日期加3天。
我听说过JodaTime和NodaTime,但我还没有看到任何内容,但是我没有看到。 我应该使用什么来在C#中获得此功能?
答案 0 :(得分:4)
没有库(我知道,包括JodaTime到.NET的端口)可以使用这样的表达式。只要表达式被简单地链接(就像你的例子中那样),编写一个RegEx就可以很容易地解析该表达式并自己进行处理:
public static DateTime CalcDate(string expression, DateTime epoch)
{
var match = System.Text.RegularExpressions.Regex.Match(expression,
@"(([+-])(\d+)([YDM]))+");
if (match.Success && match.Groups.Count >= 5)
{
var signs = match.Groups[2];
var counts = match.Groups[3];
var units = match.Groups[4];
for (int i = 0; i < signs.Captures.Count; i++)
{
string sign = signs.Captures[i].Value;
int count = int.Parse(counts.Captures[i].Value);
string unit = units.Captures[i].Value;
if (sign == "-") count *= -1;
switch (unit)
{
case "Y": epoch = epoch.AddYears(count); break;
case "M": epoch = epoch.AddMonths(count); break;
case "D": epoch = epoch.AddDays(count); break;
}
}
}
else
{
throw new FormatException(
"The specified expression was not a valid date expression.");
}
return epoch;
}
答案 1 :(得分:2)
您可以使用DateTime和TimeSpan的组合来完成所有这些操作。你可以在http://dotnetperls.com/timespan
找到一些很好的例子来自您的示例:DateTime EstimatedArrivalDate = DateTime.Now.AddDays(3);