【问题标题】:How to return Datetime correctly in WEB API from Database如何从数据库的 WEB API 中正确返回日期时间
【发布时间】:2017-05-05 15:19:12
【问题描述】:

我有以下具有 2 个日期时间字段的实体..

public class Contactos
    {

        public int IdContacto { get; set; }


        public string PrimerNombre {
            get;set; 
        }

        //Code cut for brevity

        public DateTime? FechaConsulta { get; set; }

        public DateTime? FechaArchivado { get; set; }



    }

然后在我的 api 上我有这个

  [ResponseType(typeof(Contactos))]
        public List<Contactos> GetContactosDepurar(DateTime fechaInicial)
        {
            var contactos = ContactosDao.GetContactosDepurados(fechaInicial);
            return contactos.ToList();
        }

还有这个

  public static List<Contactos> GetContactosDepurados(DateTime fechaInicial)
        {
            var fecha = fechaInicial.ToString("yyyy/MM/dd");
            string sql = @"SP_ConsultarContactosDepurar";
            return Db.Read(sql, ContactosDepurar, new object[]
            {
                "@fechaInicial", fechaInicial
            }).ToList();

        }

        static readonly Func<IDataReader, Contactos> ContactosDepurar = reader =>
        new Contactos
        {
            IdContacto = reader["idContacto"].AsInt(),
            PrimerNombre = reader["primerNombre"].ToString(),
            FechaArchivado = reader["fechaArchivado"] is DBNull ?  (DateTime?)null : DateTime.ParseExact(reader["fechaArchivado"].ToString(), "dd/mm/yyyy", CultureInfo.CurrentCulture),
            FechaConsulta = reader["fechaConsulta"] is DBNull ? (DateTime?)null: DateTime.ParseExact(reader["fechaConsulta"].ToString(), "dd/mm/yyyy", CultureInfo.CurrentCulture)
        };

问题是在 POSTMAN 上检查 RETURN 值时,日期字段作为数字返回:

   "FechaConsulta": "/Date(1459832400000-0500)/",

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-web-api asp.net-web-api2


    【解决方案1】:

    只需使用内置的时间函数将时间转换为您的当地时间。从这里选择:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms725473(v=vs.85).aspx

    【讨论】:

    • 如果她返回的是日期时间,为什么在 APÎ 响应中返回一个整数?她的问题是如何让它真正返回一个 DateTime 字符串,比如 22-02-2017 而不是那个整数。
    • 时间不是固定的问题,是显示的问题。
    • 它显示的格式可以通过 Web API 发送。它是一种标准格式,称为“机器时间”。它是从 1970 年 1 月 1 日开始的秒数。如果用户希望 API 以不同的方式发送时间,那么他们将不得不重新编程 API 的代码。否则,您必须将发送的时间转换为可读的时间格式。
    【解决方案2】:

    我会为日期传递一个 Unix/Epoch 时间戳。我经常使用 Stripe,这就是他们传递所有日期时间的方式。我从 post 改编了我的答案。

            var myDate = new DateTime(2017, 5, 5);
            int unixTimestamp = (int)(myDate.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
    

    【讨论】:

    • 如果她返回的是一个日期时间,为什么在 APÎ 响应中它返回一个整数?她的问题是如何让它真正返回一个 DateTime 字符串,比如 22-02-2017 而不是那个整数。
    • 他们得到的日期已经是一个带有时间偏移的Epoch值,他们需要的是如何以“人类”格式读取它
    【解决方案3】:

    快速突触是意识到 DateTime 只是一个数字序列,这就是它在内部的处理方式。当您想查看 DateTime 的值时,您很可能希望将其格式化为日期的文本表示形式。

    因此,您应该返回而不是返回 FechaConsulta 和 FechaArchivado FechaConsulta.ToString("yyyy/MM/dd")FechaArchivado.ToString("yyyy/MM/dd")

    有关什么是 DateTime 以及如何使用它的相对快速阅读,请阅读我发布的关于 SQL Server 如何存储 DateTime、应用程序如何使用它以及如何更改显示格式的问题的答案 Sql saving date with incorrect format

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多