(MS)DateTimeをIntとしてエンコードするより良い方法はありますか?
私がやっていることをする良い方法があるように感じますが、私はそれが何であるか分かりません。よりエレガントで速いか何かがある場合に私が尋ねると思った。
Html.DropDownListを使用するMS Razor MVCを使用してWebページを開発しています。これは、選択肢を表示文字列として整数IDコードにマップします。 (私はと思う私はそれがDateTime値に文字列をマップすることができます)。
しかし、いくつかのケースでは、DateTimeオブジェクトとして格納されている日付から選択したいと思います。 IDコードとDateTimeの値を関連付けるもう1つのテーブルをメモリ内に作ることができるとわかりましたが、私は代わりに考えました(また、Webページの面倒さのための別の回避策のために日付をintとしてエンコードしたいと思うので) intとしての日付。
問題:
int型の値としてDateTimeオブジェクトの日付を変換し、後でエンコードされたint型から戻ってその日までのDateTimeの日付を設定するための最善の方法。私のソリューションの主な醜さは、DateTimeは読み取り専用のDayOfYear関数を提供していますが、(Date、DayOfYear)に日付を設定する方法はわかりません。そのため、ループのあるメソッドを作成しました。 。
MY CURRENT(OK)SOLUTION:POSIX時間としてタイムスタンプをフォーマットしようとして
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;
}
どうもありがとうございました。それはより迅速に実行する必要があります。また、Webセッションのためだけに存在し、現在のイベントについてのものであるため、1970年よりも最近の年以降、ダニとなる可能性があります。 – Dronz