segunda-feira, 24 de outubro de 2011

Formatando datas no SQL e no C#

Muitas vezes é necessário exibir datas em um determinado formato no GridView. Muitos programadores convertem a data para o formato desejado já na consulta SQL ou procedure. Isso não está correto por uma série de motivos, entre os quais podemos citar:

1) A responsabilidade de formatar a data deve ser totalmente da view, ou seja, da camada de apresentação.
2) Datas formatadas pelo SQL não são mais datas, são varchars, e não podem ser ordenados como datas.
3) Trazendo sempre a data integral do banco de dados pode-se fazer qualquer operação desejada com ela.

Veja o link abaixo para tirar qualquer dúvida que você possa ter a respeito.
http://weblogs.sqlteam.com/jeffs/archive/2007/04/13/format-date-sql-server.aspx

Dito isso, algumas considerações interessantes:

Para formatar strings diretamente em uma GridView adicione a coluna (bound column) e defina um valor para a propriedade DataFormatString:


<asp:BoundField DataField="Data" DataFormatString="{0:dd/MM/yyyy}" HeaderText="Data" />
<asp:BoundField DataField="Hora" DataFormatString="{0:HH:mm:ss}" HeaderText="Hora" />

dd - Dia com dois dígitos
MM - Mês com dois dígitos, deve ser maiúsculo
yyyy - Ano com quatro dígitos

hh - Hora no formato de 12 horas (necessário AM e PM)
HH - Hora no formato de 24 horas
mm - Minuto
ss - Segundo

Função para extrair a data de um datetime, com hora 0:00:00


CREATE  function [dbo].[sudf_Common_DateOnly]
(
@dtDateTime DateTime
)
returns datetime
as
begin
    return dateadd(dd, 0, datediff(dd, 0, @dtDateTime))
end

Função para extrair a hora de um datetime, com data 01/01/1900


CREATE function [dbo].[sudf_Common_TimeOnly]
(
      @dtDateTime datetime
)
returns datetime
as
begin
    return dateadd(day, -datediff(day, 0, @dtDateTime), @dtDateTime)
end
Fonte:
http://www.lazerwire.com/2011/10/ms-sql-date-only.html
http://www.lazerwire.com/2011/10/ms-sql-time-from-datetime.html

Melhor fonte de informação sobre esses formatos:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx

Funções para lidar com datas:
http://msdn.microsoft.com/en-us/library/aa258863(v=sql.80).aspx

Conversão de datas com Convert no SQL Server:
http://www.sql-server-helper.com/tips/date-formats.aspx


Have fun ;)

Nenhum comentário:

Postar um comentário

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)