当我从C#查询涉及DateTime
字段的SqlServer数据库时,返回的System.DateTime
有Kind==Unspecified
,这并不奇怪,因为SqlServer DateTime
类型不保留时区信息。< / p>
我想知道是否有办法自动将这些值读取为本地或通用,而不是在读取查询结果后手动转换它们,这会在错过字段时引入更多错误的可能性。
典型代码如下:
using (var conn = ...)
using (var command = ...)
{
conn.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
DateTime dateField = (DateTime)reader["date"];
//dateField.Kind == Unspecified
}
}
答案 0 :(得分:4)
DateTime dateField = DateTime.SpecifyKind((DateTime)reader["date"], DateTimeKind.Utc);
由于它不是在数据库中持久存储,你必须在自己的代码中指定它,尽管你可以创建一个Extension方法,但DataReader中没有快捷方法。
public static class Helper{
public static DateTime GetDateTimeAsUtc(this IDataReader reader, string column){
return DateTime.SpecifyKind((DateTime)reader[column], DateTimeKind.Utc);
}
}
然后调用它
DateTime dateField = reader.GetDateTimeAsUtc("date");