0

背景(無視/スキップしても大丈夫):

私がやっていることをもっとうまくやる方法があるはずだと思いますが、それが何であるかわからず、私の解決策はうまくいくと思いますが、もっとエレガントで速いものがあるかどうか尋ねたいと思いましたなんでもいい。

私は、Html.DropDownListを使用するMS Razor MVCを使用してWebページを開発しています。これは、表示文字列としての選択肢を整数IDコードにマップする選択リストUIコントロールを提供します。(文字列をDateTime値にマップさせることはできないと思います。)

しかし、いくつかのケースでは、DateTimeオブジェクトとして保存されている日付から選択したいと思います。IDコードをDateTime値に関連付けるさらに別のテーブルをメモリ内に作成できることに気付きましたが、代わりに(また、Webページの煩わしさのさらに別の回避策のために日付をintとしてエンコードしたいと思うので)、 intとしての日付。

問題:

DateTimeオブジェクトの日付をint値として変換し、後でDateTimeの日付をエンコードされたintからその日付に戻すのに最適な方法。私のソリューションの主な醜い点は、DateTimeが読み取り専用のDayOfYear関数を提供することですが、日付を(Date、DayOfYear)に戻す方法がわからないため、ループを使用してメソッドを作成しました。 。

私の現在の(OK)ソリューション:

    public int encodeDate(DateTime date)
    {
        return ((date.Year - 2012) * 400) + date.DayOfYear;
    }

    public DateTime decodeDateCode(int dateCode)
    {
        int year = (dateCode / 400) + 2012;
        int day = dateCode % 400;
        // MS DateTime doesn't provide a direct reverse conversion for DayOfYear, so find it:
        int month = 1;
        int mThresh = DateTime.DaysInMonth(year, month);
        while (day > mThresh)
        {
            day -= mThresh;
            month++;
            mThresh = DateTime.DaysInMonth(year, month);
        }
        DateTime dateValue = new DateTime(year, month, day);
        return dateValue;
    }
4

1 に答える 1

1

タイムスタンプを POSIX 時間 (POSIX 時間 / Unix 時間、http://en.wikipedia.org/wiki/Unix_timeを参照) としてフォーマットしようとしていますか?

私自身も同様の問題を抱えていましたが、ここで素晴らしい解決策を見つけました: Unix タイムスタンプを .NET DateTime に変換する

リンクから:

DateTime ConvertFromUnixTimestamp(double timestamp)
{

}


double ConvertToUnixTimestamp(DateTime date)
{

}
于 2012-04-10T20:47:42.297 に答える