我有一个数据库,其中日期保存为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
答案 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");
}
}
}
显然,您可以根据需要在前端格式化日期/时间。