2017-05-05 53 views
1

返回日期時間,我有以下的實體,而2個datetimefields ..如何正確地在WEB API從數據庫

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)/", 

回答

0

我會傳遞一個Unix/Epoch時間戳的日期。我使用Stripe很多,這就是他們如何通過所有日期。我從這個post調整了我的答案。

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

˚F她返回日期時間,爲什麼它返回一個整數API響應?她的問題是如何使它真的返回DateTime字符串,類似22-02-2017,而不是該整數。 –

+0

他們得到的日期已經是具有時間偏移的Epoch值,他們需要的是如何以「人類」格式讀取它 –

1

只需要使用內置的時間函數將時間轉換爲當地時間。你選,從這裏開始:

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

+0

如果她正在返回Datetime,爲什麼在AP?響應中返回一個整數?她的問題是如何使它真的返回DateTime字符串,類似22-02-2017,而不是該整數。 –

+1

這不是固定時間的問題,而是顯示它的問題。 –

+0

它顯示可通過Web API發送的格式。它是一種標準格式,稱爲「機器時間」。其從1970年1月1日開始的秒數。 如果用戶希望API發送不同的時間,那麼他們將不得不重新編程API的代碼。否則,您必須將發送的時間轉換爲可讀的時間格式。 –

0

快速突觸是要認識到一個DateTime僅僅是一個數字序列,這就是它是如何內部處理。當你想看到DateTime的值時,你很可能想要將其格式化爲日期的文本表示。

因此而不是返回FechaConsulta和FechaArchivado,你應該返回 FechaConsulta.ToString("yyyy/MM/dd")FechaArchivado.ToString("yyyy/MM/dd")

有關什麼日期時間,以及如何使用它相對快速閱讀,請閱讀我張貼在一個關於問題的答案SQL Server如何存儲日期時間,應用程序如何處理它,以及如何改變顯示格式 Sql saving date with incorrect format

相關問題