【发布时间】:2019-06-10 09:18:17
【问题描述】:
使用Entity Framework时如何更改DateTime格式?
在我的数据库表中,sb_ActivityDate 列是“日期时间”数据类型。
这是我获取该列值的方法:
var query = context.CPDActivities.AsQueryable();
if (!(member.MemberID == Guid.Empty))
{
query = query.Where(e => e.sb_MemberContactId == member.MemberID).OrderBy(e=>e.sb_ActivityDate).ThenBy(e => e.CreatedOn);
}
else
{
return null;
}
单步执行代码可以看到“sb_ActivityDate”值现在是 M/d/yyyy 格式,我需要 dd/MM/yyyy。
Entity Framework 数据库首先创建的日期属性:
public Nullable<System.DateTime> sb_ActivityDate { get; set; }
编辑1:我的系统日期格式:
编辑 2:
- Visual Studio 2017
- .Net 4.5.1 版
编辑 3:
编辑 4:
添加了一个带有日期的简单测试文本框:
tb_dateTest.Text = DateTime.Now.ToString();
这似乎表明 CMS 文化并未导致问题。其他东西正在格式化日期。
【问题讨论】:
-
日期时间值没有格式,只有在您向用户显示值时才有意义。 SSMS 和 Visual Studio 调试中显示的内容取决于系统设置。你不应该关心这些。
-
正如我所说,该值没有固有格式。如果您没有提供明确的格式,它将使用您系统的格式。
-
And stepping through the code can see that the 'sb_ActivityDate' value is now in M/d/yyyy format where I need dd/MM/yyyy.datetime没有格式。它在调试器中的显示方式完全无关紧要 - 它作为没有“格式”的数值存储在幕后。您的问题真的是“我如何根据这种格式将此datetime转换为string? -
@Agamemnon
DateTime在 .NET 或任何数据库产品中没有格式。它们只是二进制值。您不需要在任何地方对文化进行硬编码。如果您确保在数据库和代码中使用正确的类型,使用参数化查询并且仅在 UI 上格式化日期,您将能够处理所有语言环境而无需更改任何代码 -
@Agamemnon 如果您想以特定样式显示日期,您应该指定客户端的语言环境或在用户界面上指定格式字符串本身。 EF 与 UI 无关。这就是 mjwills 询问它是什么应用程序的原因 - 这是最重要的问题。桌面应用程序选择最终用户的区域设置。 Web 应用程序以浏览器的 首选语言开始。在所有情况下,.NET 都会尝试在 UI 层确定正确的语言环境
标签: c# visual-studio datetime