如何在WEB API中从数据库正确返回日期时间

问题描述 投票:0回答:4

我有以下实体,它有 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
4个回答
1
投票

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

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


0
投票

我会传递该日期的 Unix/Epoch 时间戳。我经常与 Stripe 合作,他们就是这样度过所有约会时间的。我根据这篇post改编了我的答案。

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

0
投票

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

因此,您应该返回,而不是返回 FechaConsulta 和 FechaArchivado

FechaConsulta.ToString("yyyy/MM/dd")
FechaArchivado.ToString("yyyy/MM/dd")

要相对快速地了解 DateTime 是什么以及如何使用它,请阅读我在有关 SQL Server 如何存储 DateTime、应用程序如何使用它以及如何更改显示格式的问题上发布的答案 Sql 保存格式不正确的日期


0
投票

[路线(“api/[控制器]”)] [API控制器] 公共类 DateTimeController :ControllerBase { [http获取] 公共 IActionResult GetDateTime() { 日期时间 当前日期时间 = DateTime.Now; 返回确定(当前日期时间); } }

© www.soinside.com 2019 - 2024. All rights reserved.