【问题标题】:Convert SQL date to dd-mmmm-yyyy C#将 SQL 日期转换为 dd-mmmm-yyyy C#
【发布时间】:2019-07-03 18:45:29
【问题描述】:

我在 SQL 表中有一个 date 字段,如果我尝试保存,则 09-02-2019 或 09-february-2019 他将其保存给我,但尝试恢复该日期显示如下(全部一起或与 T 一起):

2019-02-09 00:00:00:000

我正在尝试使用 EF 和 LINQ 恢复这些值以便能够格式化日期,我尝试实现这一点:

我的班级订单中的日期属性

[Column(TypeName = "date")]
public DateTime? fechaInicio { get; set; }

[Column(TypeName = "date")]
public DateTime? fechaExpo { get; set; }

[Column(TypeName = "date")]
public DateTime? fechaEntrega { get; set; }

获取数据列表

//TRAER LISTA DE ORDENES
  public List<mapOrdenesListaTemp> listadoOrdenes()
  {
     var lista = new List<mapOrdenesListaTemp>();

      using(var ctx=new ModelContext())
      {
         lista = ctx.Ordenes.Select(m => new mapOrdenesListaTemp
                                    {
fechaInicio=Convert.ToDateTime(m.fechaInicio).ToString("dd-mmmm-yyyy",CultureInfo.InvariantCulture),
fechaExportacion= Convert.ToDateTime(m.fechaExpo).ToString("dd-mmmm-yyyy", CultureInfo.InvariantCulture),
fechaEntrega= Convert.ToDateTime(m.fechaEntrega).ToString("dd-mmmm-yyyy", CultureInfo.InvariantCulture)

                                     }).ToList();  

      }

我尝试在此处分配数据(类 mapOrdenesListaTemp)

public class mapOrdenesListaTemp
{
    public string fechaInicio { get; set; }
    public string fechaEntrega { get; set; }
    public string fechaExportacion { get; set; }
}

但我收到此错误:

System.NotSupportedException: 'LINQ to Entities 无法识别 方法'System.String ToString(System.String, System.IFormatProvider)' 方法,并且该方法不能翻译成商店表达式。'

我知道我不能使用.ToString (),因为错误告诉我,但是我如何恢复数据然后应用转换(我想将日期从2019-02-09 传递给09-February-2019?无论如何为了绕过这个错误,不知道我的代码是否正确?)

【问题讨论】:

  • 如果可以的话,我想你还没有完全理解日期值和日期表示之间的区别。该值是一个大整数,基本上是自默认日期(如 1900 年 1 月 1 日或 1970 年 1 月 1 日,Unix 纪元)以来的时间单位数。当您从数据库中读取数据时,您会得到一个日期值。你得到的价值非常好。您只需要在输出时根据需要对其进行格式化。喜欢fechaInicio?.ToString("dd mmmm yyyy")。您还可以使用 toString 重载来指定区域性。我错过了什么吗?
  • @A.Chiesa 正确,我需要将输出格式化为 ToString("dd mmmm yyyy") ,我找到了在互联网上转换日期的方法,但我不知道这样做是否正确
  • 是的 ;) 基本上,您在整个应用程序中都将日期保持为“值形式”(没有官方术语:它只是一个 DateTime 值)。除非您输出值:无论如何,用户将看到一个字符串,因此您可以选择如何执行格式化。如果您不这样做,框架将选择默认格式字符串。这就是你所看到的。
  • 我真的认为@A.Chiesa 做到了——日期是它自己的数据类型。你如何渲染它是另一回事。这是如何显示的?在表单中、在 Web 应用程序中、在控制台上?

标签: c# sql entity-framework linq date


【解决方案1】:

当你使用 1. DateTime 数据类型,然后将值存储如下示例 1998-01-02 10:10:50.600 2. 日期数据类型,然后值将被存储如下示例 1998-01-02 00:00:00.000 - 时间字段将始终存在,但将是 00:00:00.000

在这种情况下,我的建议是将日期数据类型转换为字符串,同时在数据库中保存和检索值

【讨论】:

    【解决方案2】:

    错误信息很清楚。您无法在 EF 查询中格式化日期,因为它无法转换为等效的 sql。

    或者,您可以执行以下操作:

    lista = ctx.Ordenes.Select(m => new { m.fechaInicio, m.fechaExpo, m.fechaEntrega}).ToList();
    
    var listWithFormattedDate = lista.Select(m => new mapOrdenesListaTemp
                                {
                                   fechaInicio = m.fechaInicio?.ToString("dd-MMMM-yyyy",CultureInfo.InvariantCulture),
                                   fechaExportacion= m.fechaExpo?.ToString("dd-MMMM-yyyy",CultureInfo.InvariantCulture),
                                   fechaEntrega= m.fechaEntrega?.ToString("dd-MMMM-yyyy", CultureInfo.InvariantCulture)
                                 }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多