有没有更好的方法将(MS)DateTime编码为Int?

有没有更好的方法将(MS)DateTime编码为Int?,datetime,drop-down-menu,type-conversion,Datetime,Drop Down Menu,Type Conversion,背景(确定忽略/跳过): 我觉得应该有更好的方法来做我正在做的事情,但我不知道它是什么,我认为我的解决方案是有效的,但我想我会问一下,如果有更优雅、更快或其他的东西 我正在用MSRazorMVC开发一个网页,它使用Html.DropDownList,它提供了一个选择列表UI控件,该控件将选择映射为显示字符串到整数ID代码。(我认为我不能让它将字符串映射到日期时间值。) 但在一些情况下,我想从存储为DateTime对象的日期中进行选择。我意识到我可以在内存中创建另一个表,将ID代码与DateTim

背景(确定忽略/跳过):

我觉得应该有更好的方法来做我正在做的事情,但我不知道它是什么,我认为我的解决方案是有效的,但我想我会问一下,如果有更优雅、更快或其他的东西

我正在用MSRazorMVC开发一个网页,它使用Html.DropDownList,它提供了一个选择列表UI控件,该控件将选择映射为显示字符串到整数ID代码。(我认为我不能让它将字符串映射到日期时间值。)

但在一些情况下,我想从存储为DateTime对象的日期中进行选择。我意识到我可以在内存中创建另一个表,将ID代码与DateTime值关联起来,但我想(而且因为我想我可能想将日期编码为int,以解决另一个网页烦恼问题),我会将日期编码为int

问题:

如何最好地将DateTime对象的日期转换为int值,然后再将DateTime的日期从编码的int值设置回该日期。我的解决方案的主要缺点是DateTime提供了一个只读的DayOfYear函数,但我不知道如何将日期设置回(date,DayOfYear),因此我编写了一个带有循环的方法,这很可爱,但可能是懒汉

我当前(确定)的解决方案:

    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;
    }

是否要将时间戳格式化为POSIX时间(POSIX时间/Unix时间,请参阅)

我自己也有类似的问题,在这里找到了一个很好的解决方案:

从链接:

DateTime ConvertFromUnixTimestamp(double timestamp)
{

}


double ConvertToUnixTimestamp(DateTime date)
{

}

非常感谢。这应该执行得更快,而且因为它只适用于一个web会话,而且是关于当前事件的,所以它也可能是比1970年更近的一年。