【问题标题】:Change DateTime format when using Entity Framework使用实体框架时更改日期时间格式
【发布时间】: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


【解决方案1】:

问题与区域/文化设置有关,而且 Visual Studio 正在使用的设置似乎与数据库不同。从 VS2015 开始,您可以通过检查 Thread.CurrentThread.CurrentCulture 的值来检查调试器将在什么格式下工作

如果您想将日期/时间格式化为特定于显示日期/时间的格式,例如来自通常用户可能具有不同文化设置的 Web 应用程序,那么您需要在您需要将其转换为字符串'正在显示日期/时间。

【讨论】:

  • 我可以不只是改变某个地方的文化吗?在 Visual Studio 或某些实体框架设置/属性中?
  • Visual Studio 使用 Windows 的区域设置,但实际上在显示日期时将日期格式化为字符串总是一个好主意。
  • 我的系统位于英国,其他所有内容都显示为 dd/MM/yyyy。我刚刚添加了显示系统数据格式设置的屏幕截图
  • 将日期转换为字符串导致首先出现问题。 DateTime 在 .NET 中没有格式。数据库中使用的日期类型也没有格式。解决问题的方法是 not 将任何内容转换为字符串
  • @Agamemnon 不要使用字符串。整个欧洲的国家/地区使用不同的日期布局,但不必对格式进行硬编码,或为每个国家/地区使用不同的格式。他们这样做是通过使用字符串来存储日期
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2018-04-25
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多