none
Como exibir a Data e Hora no Formato Brasileiro pelo Horário do Servidor? RRS feed

  • Pergunta

  •  

    Olá pessoal tenho uma pagina em asp.net ajax enabled web application que utilizará a seguinte linha para exibir a hora, acredito que o procedimento vale o mesmo para data

     

    O que eu quero saber é por exemplo tem um usuário vendo o meu site na frança ou qualquer outro país estrangeiro eu gostaria que o mesmo mediante o método abaixo na hora que acessa-se o meu site ou página residindo no meu servidor brasileiro que visse a minha data e/ou hora exibida apenas no formato brasileiro

     

    abaixo o código

     

    Code Snippet

    using System;

    using System.Collections;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

    namespace myapp

    {

    public partial class WebForm1 : System.Web.UI.Page

    {

    protected void Page_Load(object sender, EventArgs e)

    {

    //Label1.Text = DateTime.Now.Hour.ToString()+":"+DateTime.Now.Minute.ToString()+":"+DateTime.Now.Second.ToString();

    //Label1.Text = DateTime.Now.ToShortTimeString();

    Label1.Text = DateTime.Now.ToLongTimeString();

    }

    }

    }

     

     

    O que eu teria que fazer para que a Data e Hora exibida pra ele no caso do metodo ácima fosse sempre vista no formato brasileiro - Dia, Mês e Ano para a data e HH:mmTongue Tieds para o  horário, mas que ele visse o Horário e a Data pelo Horário de Brasília

     

    Fico no aguardo e desde já agradeço

    sábado, 10 de janeiro de 2009 19:29

Respostas

Todas as Respostas

  • LuizIta,

     

    A classe DateTime sempre mantém o valor da data da máquina do cliente, ou seja, ocorre problemas com frequência com fuso horário de máquina de clientes diferentes em pontos diferentes do mundo, para solucionarmos essa questão precisamos utilizar javascript pegando a hora do servidor onde o seu website estará hospedado.

     

    Segue o código javascript para pegar hora do servidor:

     

    Code Snippet

    <script type="text/javascript">
    var hh = <%= hour(now()) %>;
    var mm = <%= minute(now()) %>;
    var ss = <%= second(now()) %>;
    function relogio(){
    if (ss >= 60){
    ss = 00;
    mm = mm + 1;
    if (mm >= 60){
    mm = 00;
    hh = hh + 1;
    if (hh >= 24){
    hh = 00;
    }}}
    ss = ss + 1;
    if (hh <= 9){
    xhh = "0" + hh;
    } else {
    xhh = hh;
    }
    if (mm <= 9){
    xmm = "0" + mm;
    } else {
    xmm = mm;
    }
    if (ss <= 9){
    xss = "0" + ss;
    } else {
    xss = ss;
    }
    document.all("span_relogio").innerHTML = xhh + ":" + xmm + ":" + xss;
    lrelogio = setTimeout("relogio()", 1000);
    }
    </script>

     

    Espero ter ajudado.

     

    Abraços,

     

    Leandro Rodrigues

    sábado, 10 de janeiro de 2009 20:24
  • Mas não existe uma solução em Asp.Net para isso? E aproveitando como eu embuto isso no meu code-behind e o adapto ao meu controle LABEL de minha pagina .aspx onde está sendo mostrado o resultado

     

    Fico no aguardo e desde já agradeço

    sábado, 10 de janeiro de 2009 20:32
  • LuizIta,

     

    Existe inúmeras maneiras.

     

    Como registrar uma função Javascript no Code-behind?

     

    Use RegisterStartupScript:

    Code-behind:

    Code Snippet

    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", " ");

     

     

    Use Literal control:

    Code Snippet
    void Button1_Click(object sender, EventArgs e)
     {
         string str;
         str = "<script language='JavaScript'>";
         str += "selectRange()";
         str += "</script>";
         Literal1.Text = str;
     }

     

     

    Utilizei uma Literal, mas vc pode utilizar que controle vc quiser.

     

    Como lhe disse anteriormente existe diferentes formal de utilização observe outra forma.

    http://www.macoratti.net/07/09/aspn_ujs.htm

    http://www.codigofonte.net/dicas-232/utilizando-javascript-com-net

     

    Espero ter ajudado.

     

    Abraços,

     

    Leandro Rodrigues

    sábado, 10 de janeiro de 2009 20:54
  • Olá Luiz,

     

    Uma vez que trata-se de uma aplicação Web, todo seu código é executado no servidor, portanto, independente do país onde o visitante está, a hora que você obtém através da classe DateTime, será a data/hora que está no servidor onde sua aplicação está hospedada, e você é quem decide qual será o formato de data, hora, números, etc..., que você deseja enviar para o visitante.

     

    Quando você converte uma data para o formato string, a cultura utilizada para formatar essa data é a cultura que está configurada na sua aplicação. Assim, uma alternativa é definir no seu Web.config que sua aplicação utiliza a cultura Brasileira:

     

    Code Snippet

     

     <system.web>

    <globalization culture="pt-BR" uiCulture="pt-BR"/>

     </system.web>

     

     

     

    Uma outra alternativa, é você definir a cultura explicitamente, quando quiser formatar a data:

     

    Code Snippet

     

     // Cria uma instência com as definições da cultura brasileira (formatos)

     CultureInfo culturaBrasileira = new CultureInfo("pt-BR");

     

     // Mostra no formato longo, utilizando a cultura que você quer

     Label1.Text = DateTime.Now.ToString("D", culturaBrasileira);

     

     

    Vale lembrar que a classe CultureInfo está dentro do namespace System.Globalization (não esqueça do using).

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    • Sugerido como Resposta Lucas M. Oliveira quarta-feira, 10 de novembro de 2010 10:41
    domingo, 11 de janeiro de 2009 00:04
    Moderador
  • Caio,

     

    Eu até sabia da classe CultureInfo, mas não sabia que ela poderia ser aplicada nesse cenário.

     

    Abraços,

     

    Leandro Rodrigues

     

    domingo, 11 de janeiro de 2009 00:08
  • Obrigado em relação ao Globalization  e Cultureinfo, tb imaginei que pudesse sêr isso mas não tinha certeza, mas só pra me complementar a minha duvida usando o modelo com a utilização do timer do ajax abaixo porque sempre ao incrementar os segundos ele sempre pula um digito de segundo tipo

     

    ao invés dele incrementar 00:00:51 ele incrementa sempre 00:00:53 no lugar de 00:00:52 como deveria sêr

     

    aqui o source.aspx

     

    Code Snippet

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

    <title>Untitled Page</< FONT>title>

    <script type="text/javascript">

    function pageLoad() {

    }

    </< FONT>script>

    </< FONT>head>

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:ScriptManager ID="ScriptManager1" runat="server" />

    </< FONT>div>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

    <Triggers>

    <asp:AsyncPostBackTrigger ControlID="Timer1" />

    </< FONT>Triggers>

    <ContentTemplate>

    <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="1000">

    </< FONT>asp:Timer><div align="center">

    <asp:Label ID="Label1" runat="server" Text="Label"></< FONT>asp:Label>

    </< FONT>div>

    </< FONT>ContentTemplate>

    </< FONT>asp:UpdatePanel>

    </< FONT>form>

    </< FONT>body>

    </< FONT>html>

     

     

    Aqui o code-behind

     

    Code Snippet

    protected void Page_Load(object sender, EventArgs e)

    {

    //Label1.Text = DateTime.Now.Hour.ToString()+":"+DateTime.Now.Minute.ToString()+":"+DateTime.Now.Second.ToString();

    //Label1.Text = DateTime.Now.ToShortTimeString();

    Label1.Text = DateTime.Now.ToLongTimeString();

     

     

    }

    protected void Timer1_Tick(object sender, EventArgs e)

    {

    Label1.Text = DateTime.Now.ToLongTimeString();

    }

     

     

     

    Fico no aguardo e desde já agradeço

    • Sugerido como Resposta Lucas M. Oliveira quarta-feira, 10 de novembro de 2010 10:48
    domingo, 11 de janeiro de 2009 19:29
  • Olá Luiz,

     

    O Timer do Ajax, está fazendo com que uma nova requisição ao servidor aconteça a cada 1 segundo, para executar o seu código e atualizar o HTML da página...

     

    Tudo isso demora algum tempo, por isso você está vendo essa diferença de alguns segundos na resposta. No seu exemplo, está demorando pelo menos 1 segundo para a requisição chegar ao servidor e executar o código...

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    segunda-feira, 12 de janeiro de 2009 11:07
    Moderador
  •  

    Então isso não é erro da aplicação é normal mesmo esse delay ou pulo vamos assim chamar e não há solução para correção deste intervá-lo

     

    Fico no aguardo e desde já agradeço

    segunda-feira, 12 de janeiro de 2009 15:37
  •  LuizIta wrote:

    Então isso não é erro da aplicação é normal mesmo esse delay ou pulo vamos assim chamar e não há solução para correção deste intervá-lo

     

    Sim... Isso é normal.

     

    Tem uma série de fatores envolvidos como, por exemplo, a velocidade de conexão internet da máquina que está visitando o site, a velocidade de conexão internet do servidor, a velocidade de processamento do servidor, enfim...

     

    Agora, focando no seu objetivo (que pelo que vi, é mostrar um relógio digital em JavaScript), o ideal é montar um script em JavaScript que seja enviado para o navegador, já com a hora do servidor...

     

    Assim, você não precisa de Ajax ou de ficar fazendo requisições apenas para atualizar o relógio... O próprio JavaScript se encarrega de incrementar as horas, a partir da hora do servidor.

     

    A sugestão do Leandro nesse tópico foi exatamente essa Wink.

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    segunda-feira, 12 de janeiro de 2009 18:09
    Moderador
  • Mas eu fiz o teste do Leandro como abaixo e não funcionou

     

    source aspx

     

    Code Snippet

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

    <title>Untitled Page</< FONT>title>

    </< FONT>head>

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:Literal ID="Literal1"

    runat="server"></< FONT>asp:Literal>

    </< FONT>div>

    </< FONT>form>

    </< FONT>body>

    </< FONT>html>

     

     

    code-behind

    Code Snippet

    protected void Page_Load(object sender, EventArgs e)

    {

    string str;

    str = "<script language='JavaScript'>";

    str += "var hh = <%= hour(now()) %>; ";

    str += "var mm = <%= minute(now()) %>;";

    str += "var ss = <%= second(now()) %>;";

    str += "function relogio(){";

    str += "if (ss >= 60){ ";

    str += "ss = 00;";

    str += "mm = mm + 1; ";

    str += "if (mm >= 60){";

    str += "mm = 00;";

    str += "hh = hh + 1;";

    str += "if (hh >= 24){";

    str += "hh = 00;";

    str += "}}}";

    str += "ss = ss + 1;";

    str += "if (hh <= 9){";

    str += "xhh = '0' + hh;";

    str += "} else {";

    str += "xhh = hh;";

    str += "}";

    str += "if (mm <= 9){";

    str += "xmm = '0' + mm;";

    str += "} else {";

    str += "xmm = mm;";

    str += "}";

    str += "if (ss <= 9){";

    str += "xss = '0' + ss;";

    str += "} else {";

    str += "xss = ss;";

    str += "}";

    str += "document.all('span_relogio').innerHTML = xhh + ':' + xmm + ':' + xss; ";

    str += "lrelogio = setTimeout('relogio()', 1000);";

    str += "}";

    str += "</script>";

    Literal1.Text = str;

    }

     

     

    Eu tentei o código do Leandro dessa forma e não deu certo, fico no aguardo e desde já agradeço

     

     

    terça-feira, 13 de janeiro de 2009 04:08
  • Olá Luiz,

     

    Não testei o código do Leandro, mas imagino que ele mostrou o código para você colocar junto com o HTML do seu site, de forma a executar as linhas com para obter a hora do servidor, onde você está interpretando como texto:

     

    Code Snippet

     

     str += "var hh = <%= hour(now()) %>; ";

     str += "var mm = <%= minute(now()) %>;";

     str += "var ss = <%= second(now()) %>;";

     

     

     

    De qualquer forma, existe um exemplo de relógio em JavaScript muito simples no blog do Marcelo Ramos:

     

    Relógio em JavaScript
    http://www.marceloramos.net/Blog/post/2008/11/05/Relogio-em-JavaScript.aspx

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 16 de janeiro de 2009 00:33
    Moderador
  • Copnforme a Luizita falou, as configurações do windows já fazem isso pra vc, vai na configuração de sistema ou caso não resolva use o format(campo, "dd/mm/aaaa") comigo funciona, só não sei qual versão vc tá usando, se é mvc ou não.... #fikdik!
    terça-feira, 2 de julho de 2013 19:09