0

日付式に基づいて日付を計算するためにどのライブラリを使用できますか?

日付式は次のようになります。

  • 「+3D」(プラス3日)
  • 「-1W」(マイナス1週間)
  • 「-2Y+2D + 1M」(マイナス2年プラス1日プラス1ヶ月)

例:

DateTime EstimatedArrivalDate = CalcDate("+3D", DateTime.Now);

到着予定日が現在の日付に3日を加えたものに等しい場合。

JodaTimeとNodaTimeについて聞いたことがありますが、これを行うものはまだ見ていません。C#でこの機能を取得するには何を使用する必要がありますか?

4

2 に答える 2

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;
}
于 2010-04-29T15:51:06.400 に答える
2

DateTimeとTimeSpanの組み合わせを使用して、これらすべてを実行できます。あなたはhttp://dotnetperls.com/timespanでいくつかの良い例を見つけることができます

あなたの例から:DateTime EstimatedArrivalDate = DateTime.Now.AddDays(3);

于 2010-04-29T15:53:48.717 に答える