none
Problema - Gravação de DateTime RRS feed

  • Pergunta

  • Pessoal,
    Estou tendo um problema com gravação de campo datetime corretamente em minha base.
    Após o usuário informar a Data e Hora e submeter, irei pegar como string, que posteriormente
    converto pra datetime e gravo no banco.
    Porém quando é por exemplo:
    01/01/2012 00:00:00 , grava na base como 01/01/2012 12:00:00
    Outro exemplo:
    01/01/2012 16:00:00 , grava como 01/01/04:00:00

    Private Function RetDateTime(ByVal sDate As String, ByVal sHour As String) As DateTime
            Dim dDate As DateTime
    
            dDate = Convert.ToDateTime(sDate)
            dDate = DirectCast(dDate, DateTime).AddHours(sHour.Substring(0, 2))
            dDate = DirectCast(dDate, DateTime).AddMinutes(sHour.Substring(3, 2))
            dDate = DirectCast(dDate, DateTime).AddSeconds(sHour.Substring(6, 2))
    
       
    
            Return dDate
        End Function

    Qual pode ser a solução? obrigado


    • Editado .NET Dev quinta-feira, 9 de fevereiro de 2012 11:00
    quinta-feira, 9 de fevereiro de 2012 11:00

Todas as Respostas

  • AT, bom dia. Voce está enviando para o BD em qual formato? String ou DateTime? Tente enviar como DateTime mas antes confira o formato da data. Geralmente a data fica desta forma no BD: "2011-06-17 14:21:00". Poste como vc está enviando para o BD.


    Atenciosamente,
    Onofre A. Juvencio Junior
    (Se a achou útil o post, por favor, marque-o como resposta)
    quinta-feira, 9 de fevereiro de 2012 11:14
  • Bom dia. O colega estava tendo o mesmo problema. Veja :

    http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/92543d9d-ccbd-4671-be54-60c2ed1364e9/#a2698390-9421-4c42-aa4c-ace2b1635dab


    Paulo César Viana
    .NET Developer
    MCC - Microsoft Community Contributor
    MCP - Microsoft Certified Professional
    MCTS - Microsoft Certified Technology Especialist
    --
    Marque as respostas e contribua para uma melhora no fórum.

    quinta-feira, 9 de fevereiro de 2012 11:15
  • Boas! (fiz o exemplo em C#, mas serve como base para você resolver o problema ..)

    Assumindo que você recebe a data e a hora nos formatos dd/MM/yyyy e hh:mm, você poderia tentar o seguinte código:

    string datePart = "01/01/2012";
    string timePart = "12:00";
    
    DateTime fullDate;
    
    var dateTime = String.Format("{0} {1}", datePart, timePart);
    
    if (DateTime.TryParseExact(dateTime, "dd/MM/yyyy HH:mm", CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out fullDate))
    {
    	// Seu código ...
    }

    Isso vai jogar a data já convertida para a variável fullDate :)

    []'s

    Rodrigo


    Lembre-se se marcar como resposta se ajudar! :)


    quinta-feira, 9 de fevereiro de 2012 11:23
  • Amigo, bom dia.

    Seu servidor de banco de dados deve está com o padrão de Data/Hora dos estados unidos

    como você está montando o insert? está passando por paramêtros ? 

    você pode fazer utilizando CultureInfo, por exemplo:

                System.Globalization.CultureInfo cultInfo = new System.Globalization.CultureInfo("en-US");
                DateTime dtNow = DateTime.Now;
    
                using (SqlConnection conn = new SqlConnection(connString))
                {
                    conn.Open();
                    string sql = "insert Venda(ValorTotal,dtVendas,Cliente_Id)";
                           sql +=" values";
                           sql+="(@Valor,@Data,@ClienteID)";
                    using(SqlCommand cmd = new SqlCommand(sql,conn))
                    {
                        cmd.Parameters.Add("@Valor", SqlDbType.Float).Value = 0;
                        cmd.Parameters.Add("@Data", SqlDbType.DateTime).Value = dtNow.ToString(cultInfo);
                        cmd.Parameters.Add("@ClienteId", SqlDbType.Int).Value = 1;
                        cmd.ExecuteNonQuery();
                    }
                }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)

    quinta-feira, 9 de fevereiro de 2012 11:23
    Moderador
  • Bom dia, qual o valor do sHour que você esta passando na entrada? Tentei reproduzir o erro mas não consegui, fez a conversão normal.

    Rodrigo Reis Ferreira
    Microsoft Certified

    quinta-feira, 9 de fevereiro de 2012 11:30
  • Então por exemplo , usando o metodo q tinha citado acima, o retorno da dDate, quando se passa as strings : Data -02/02/2012 e hora 23:59:59, retorna:

    #2/2/2012 11:59:59 PM#

    quinta-feira, 9 de fevereiro de 2012 11:44
  • Olá ao invez de vc passa string para o banco manda Datetime.

    E na pagina aspx coloque LCID="1046" para ficar no padrão Brasileiro.

    public void datasServidor()
        {
            DateTime data1 = DateTime.Now;
            DateTime data2 = DateTime.Today;
        }

    Assim vc terá a data com a hora, e não esquece de verificar se no bando o campo da insert se ele está como Varchar ou Datetime.

    (Se a achou útil o post, por favor, marque-o como resposta)

    • Sugerido como Resposta Renan Buzzi quinta-feira, 23 de fevereiro de 2012 20:36
    quinta-feira, 16 de fevereiro de 2012 13:39