EF5;将字符串转换为20100326到2010/03/26

时间:2013-07-23 13:03:53

标签: c# datetime asp.net-mvc-4 entity-framework-5 data-annotations

我有一个数据库,其中日期保存为CHAR(8),时间保存为CHAR(6)。例如,数据库中的日期如下所示:20100326 for 2010/03/26,时间如下:080000表示8点钟。

当然日期和时间不能以这种方式显示在客户端上,应该分别转换为:26/04/2010和8:00。

我还希望在将日期和时间发送到服务器时将其转换回数据库格式。我正在寻找让服务器执行此操作的方法,例如使用Metadata类上的Data Annotations。但是,如果有人可以帮助我或指出我正确的方向,我无法知道如何并且感激不尽。

我正在使用Entity Framework 5并正在使用web api构建Web服务。

TNX。

BTW:以下是包含元数据的分部类中的setter / getters。

        [Display(ResourceType = typeof(Properties.OrderEntryIn_Resources), Name = "DeliveryTimeFrom")]
    public string ZNGU_T { get; set; } // Time

 [Display(ResourceType = typeof(Properties.OrderEntryIn_Resources), Name = "DeliveryDateFrom")]        
    public string ZNGU_D { get; set; } // Date

2 个答案:

答案 0 :(得分:3)

在数据库中,您应该使用他们提供的DATE / TIME类型。

但是,您需要的是(日期):

//DB -> UI
DateTime.ParseExact(input, "yyyyMMdd", CultureInfo.InvariantCulture)
    .ToString("yyyy/MM/dd");
//UI -> DB
DateTime.ParseExact(input, "yyyy/MM/dd", CultureInfo.InvariantCulture)
    .ToString("yyyyMMdd");

当时:

//DB -> UI
DateTime.ParseExact(input, "HHmmss", CultureInfo.InvariantCulture)
    .ToString("H:mm");
//UI -> DB
DateTime.ParseExact(input, "H:mm", CultureInfo.InvariantCulture)
    .ToString("HHmmss");

答案 1 :(得分:1)

我们目前为这个问题做了什么来创建一个部分类,然后添加绑定到底层数据的两个属性,但是根据需要转换数据。只要UI可以访问这两个部分类,您就可以非常无缝地隐藏数据库具有疯狂列类型的事实。

我建立在newStackExchangenInstance的答案

所以,例如。

public partial class JeroensCustomClass
{
    public string ZNGU_T { get; set; } // Time

    public string ZNGU_D { get; set; } // Date

    public DateTime DeliveryDateTimeFrom
    {
        get
        {
            var date = DateTime.ParseExact(ZNGU_D, "yyyyMMdd", CultureInfo.InvariantCulture);
            var time = DateTime.ParseExact(ZNGU_D, "yyyyMMdd", CultureInfo.InvariantCulture);
            return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
        }
        set
        {
            ZNGU_D = value.ToString("yyyyMMdd");
            ZNGU_T = value.ToString("HHmmss");
        }
    }

}

显然,您可以根据需要在前端格式化日期/时间。