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

时间:2012-04-10 19:28:16

标签: datetime drop-down-menu type-conversion

背景(可以忽略/跳过):

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

我正在使用MS Razor MVC开发一个使用Html.DropDownList的网页,它提供了一个选择列表UI控件,它将选项作为显示字符串映射到整数ID代码。 (我不认为我可以将它映射到DateTime值。)

但在某些情况下,我想选择存储为DateTime对象的日期。我意识到我可以在内存中创建另一个将ID代码与DateTime值相关联的表,但我想的是(并且因为我认为我可能想要将日期编码为内联,以解决网页烦恼的另一种解决方法),我会编码日期为int。

问题:

如何最好地将DateTime对象的日期转换为int值,然后将DateTime的日期从编码的int设置回该日期。我的解决方案的主要丑陋是DateTime提供了一个只读的DayOfYear函数,但我不知道将日期设置回(Date,DayOfYear),所以我写了一个带循环的方法,这很可爱但可能会慢一些

MY CURRENT(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;
    }

1 个答案:

答案 0 :(得分:1)

何时将时间戳格式化为POSIX时间(POSIX时间/ Unix时间,请参阅http://en.wikipedia.org/wiki/Unix_time)?

我自己遇到了类似的问题,并在此处找到了一个很好的解决方案:Convert a Unix timestamp to a .NET DateTime

从链接:

DateTime ConvertFromUnixTimestamp(double timestamp)
{

}


double ConvertToUnixTimestamp(DateTime date)
{

}