当前位置: 首页 > 知识库问答 >
问题:

使用模型构建器转换返回日期而不是日期时间

黄信厚
2023-03-14

我的模型中有一个Datetime属性,如下所示:

[DataType(DataType.Date)]
[Column(TypeName = "date")] 
public DateTime SubmittedOn { get; set; }

该值作为日期插入到数据库中,不包含时间部分。但是,当请求该值时,服务器会返回时间部分,如下所示< code > " 2020-04-03t 00:00:00 "

如何在我的dbContext中使用ModelBuilder来删除返回值时的时间部分?

modelBuilder.Entity<Model>()
              .Property(e => e.SubmittedOn)
              .HasConversion(...?)

共有2个答案

令狐翰
2023-03-14

要将数据库中的日期转换为不带时间的字符串,并将日期字符串转换为要发送到数据库的日期,请执行以下操作:

modelBuilder.Entity<Model>()
    .Property(e => e.SubmittedOn)
    .HasConversion(
        v => v.ToString("MM/dd/yyyy"),
        v => DateTime.Parse(v));
聂奇
2023-03-14

我相信数据库中只保存了日期部分,因此返回的DateTime字段中的00:00:00时间。问题在于JSON序列化。据我记忆所及,[DataType(DataType.Date)]属性过去适用于此,但由于某些原因,现在不适用(欢迎对此发表任何评论)。现在,您可以在这里做两件事(请注意,这假设您正在使用NewtonsoftJson或愿意在.net core 3.x中使用它。对于System.Text.Json,它是.net Core3.x的默认序列化程序,您可以使用System.Text.Json在ASP.net core 2.0中引用此格式化日期时间):

>

  • 制作自定义转换器,如下所示:

    public class MyCustomDateConverter : IsoDateTimeConverter
    {
        public MyCustomDateConverter()
        {
            //Here you can define any format that is allowed in C#.
            DateTimeFormat = "dd/MM/yyyy";
        }
    }
    

    现在回到DateTime字段,您将实际使用它

    [JsonConverter(typeof(MyCustomDateConverter))]
    [Column(TypeName = "date")] 
    public DateTime SubmittedOn { get; set; }
    

    因此,通过这种方式,您可以将转换器用于您想要的每个字段。

    或者,如果您使用的是ASP.NET核心,那么在JSON中序列化时,您可以为所有日期字段设置一个全局格式。在启动类中,将它添加到ConfigureServices方法

    对于.net之前的core 3.x

    services.AddJsonOptions(
                options =>
                {
                    options.SerializerSettings.DateFormatString = "dd/MM/yyyy";
                }
            );
    

    对于. net核心3. x

    services.AddControllers()
            .AddNewtonsoftJson(
                options =>
                {
                    options.SerializerSettings.DateFormatString = "dd/MM/yyyy";
                }
            );
    

  •  类似资料:
    • 我有以下应该返回时间戳的函数。当使用以下斜杠以字符串格式输入日期时,此代码有效:“2019/3/4”,但在使用 怎么回事?

    • Edit:不幸的是,我需要以日期的形式获得结果,而不是字符串,所以我不能使用sdf.format(New Date().getTime()),因为它返回字符串。另外,我需要返回的日期是当前时间的日期,而不是来自静态字符串。我希望这能澄清

    • 问题内容: 我对以下行为感到非常困惑。我从一个方法返回2日期作为字符串: 我添加了一个屏幕截图,显示返回的日期分别为“ 2018-06-20 00:00:00”和“ 2018-06-24 00:00:00”,并保留了调试跟踪以显示 值。 我只是想将日期转换为20180620格式。 方法: …接受字符串值 我不明白“ 2017年12月6日星期三00:00:00 GMT”的日期是哪里 ?这是最终 作为

    • 周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢

    • 我正在寻找将PHP日期格式(即Y-m-d H:I:s)转换为javascript日期格式(分别为YYYY-mm-dd HH:mm:ss)的简单方法。 我不想转换日期(这个问题已经有答案),我正在寻找工具/函数来转换格式代码(我还不知道,因为它是由应用程序中的用户定义的)。 用户可以用PHP date()定义的不同方式来定义它,即“Y/m/d H:i”或“Y-d-m H-i”,在javascript

    • 问题内容: 我有一个包含表的MySQL数据库。 但是,我找不到在Java中将其作为Java中某种对象返回的方法。 我可以打电话给它,它会返回,但这并不好,因为没有办法比较字符串上的日期等。 我也可以打电话,但这根本不返回时间。 问题答案: 您需要使用Thomas的注释中建议的getTime()或getTimestamp()方法。举个例子… 说出要查询的表格,如下所示: 您可以这样做: 如果要使用J