Jump to content

Dúvida com dateTime


Seabra
 Share

Recommended Posts

Olá tenho o seguinte código:

Dim dateString as String = "09-06-2010 00:00:00"

Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", Nothing)

        DateTime1 = dateObject

Como resultado obtenho  #6/9/2010#. Ou seja não aparece as horas e o formato da data está invertido mês trocado pelo dia.

O que eu pretendo é uma variavel DateTime com a data e a hora no formato "dd-MM-yyyy hh:mm:ss"

Cumprimentos

Link to comment
Share on other sites

O formato interno depende das definiçoes regionais do pc...

Ou seja para  data estar nesse formato é porque as definições regionais o assim dizem. O ParseExact serve para tu pegares num texto e converteres o mesmo para data, dizendo qual é o formato que tens o mesmo...

Para quê que queres a data nesse formato?

Link to comment
Share on other sites

Pretendo esse formato porque é o nosso formato de data e hora ou seja este:  "dd-MM-yyyy hh:mm:ss".

O meu problema é que com o ParseExact dá-me como resultado uma data que não é utilizado por nós habitulamente ou seja esta: #6/22/2010#. Que como já referi tem o mês trocado pelo dia.

O que eu pretendo é uma variavel DateTime com a data e a hora no formato "dd-MM-yyyy hh:mm:ss"

Refiro também que o formato que tenho regionalSettings no meu pc é o indicado acima.

Cumprimentos

Link to comment
Share on other sites

Mais uma vez não estou a perceber para quê fazeres o parse.  :down: Qual o objectivo?

Se é para mostrar num controlo qualquer, podes formatar a mesma para aparecer como queres? Agora em relação ao modo como o objecto datetime, guarda a data tu não tens controlo, tens controlo é como mostrar esse mesmo valor...

Link to comment
Share on other sites

Mas estás a definir o segundo argumento como Nothing ... podes definir o formato que queres.

Por exemplo:

        Dim dateString As String = "09-06-2010 00:00:00"
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", New Globalization.CultureInfo("pt-PT"))

ou

        Dim dateString As String = "09-06-2010 00:00:00"
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", New Globalization.CultureInfo("en-US"))
Link to comment
Share on other sites

Mas estás a definir o segundo argumento como Nothing ... podes definir o formato que queres.

Por exemplo:

        Dim dateString As String = "09-06-2010 00:00:00"
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", New Globalization.CultureInfo("pt-PT"))

ou

        Dim dateString As String = "09-06-2010 00:00:00"
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", New Globalization.CultureInfo("en-US"))

Olá

A data já funcina bem, mas quando digito 14:45:24 Horas este formato não é reconhecido, só reconhece o formato AM e PM.

Onde estará o problema?

Cumprimentos

Seabra

Link to comment
Share on other sites

Então troca os teus "hh" da hora para "HH"

Peço desculpa mas eu estava a utilizar este código para avaliar.

MessageBox.Show(dateObject.ToString("dd/MM/yyyy hh:mm:ss"))

       

Se eu utilizar este já mostra bem os valres.

MessageBox.Show(dateObject)

Obrigado

Cumprimentos

Link to comment
Share on other sites

Ai ... então "09-06-2010 00:00:00" é 9 de Junho ou 6 de Setembro? É que estás a indicar uma string que ele identifica como definires o formato. Não está mal, não está é como tu queres.

Assim tens uma string com o formato correcto:

Dim dateString As String = New DateTime(2010, 6, 9).ToString

Link to comment
Share on other sites

Ai ... então "09-06-2010 00:00:00" é 9 de Junho ou 6 de Setembro? É que estás a indicar uma string que ele identifica como definires o formato. Não está mal, não está é como tu queres.

Assim tens uma string com o formato correcto:

Dim dateString As String = New DateTime(2010, 6, 9).ToString

a data da minha string está no formato "dd-MM-yyyy HH:mm:ss" Ou seja "28-06-2010 15:20:56"

O que pretendo é converter esta string em datetime no mesmo formato.

Cumprimentos

Link to comment
Share on other sites

Ainda não percebi qual é a finalidade?

Podes dizer o que prentedes?

Olá

Pretendo é uma variável do tipo datetime para poder utilizar da forma que está em baixo.

Obrigado



Dim dateString As String = "22-06-2010 22:12:00"
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy hh:mm:ss", New Globalization.CultureInfo("pt-PT"))

SELECT contadores.Data_Hora AS Data_Hora, ID_Contador AS
Contador,Nome AS
Nome, E_SVazio AS H_SVazio, E_Vazio AS H_Vazio, E_Cheias AS H_Cheias,
E_Ponta AS H_Ponta, (E_SVazio+ E_Vazio+ E_Cheias+ E_Ponta) AS Total
FROM
Contadores JOIN DadosContadores ON Contadores.ID_Contador =
DadosContadores.ID
WHERE
Convert(varchar(10), contadores.Data_Hora, 104) >= dateObject AND
Convert(varchar(10), contadores.Data_Hora, 104) <= dateObject  AND
E_SVazio<>0 AND E_Vazio<>0 AND E_Cheias<>0 AND E_Ponta<>0 AND Uni_Fab
='Casita'
ORDER BY contadores.Data_Hora ASC
Link to comment
Share on other sites

Não precisa de estar no mesmo formato... Por exemplo a base de dados está em inglês, formato habitual senão me engano, MM/dd/yyyy com AM/PM e o teu sistema em português, dd-MM-yyyy com o formato 24 horas, se fizeres o tryparse para data e ficzeres a comparação ela vai funcionar, e como podes ver as datas têm formatos diferentes...

Resumindo se forem duas datas válidas ele faz a comparação correcta, independentemente da formatação.

Link to comment
Share on other sites

Olá

Reduzí ao máximo o código para vos mostrar.

Quando o minha dateObject Tem uma data de 24-05-2010 00:00:00, é-me mostrado todos os registos menores que esta data. Mas se eu alterar esta data para 24-04-2010......... são mostrados os mesmos registos. Ou seja mesmo que eu altere o mês os registos que aparecem são sempres menores que o dia 24 não respeitando o mês. É aí que está o meu problema.

Preciso mesmo de resolver isto.

Agradeço ajuda

Seabra


Dim Q1, SQL As String
        Dim DateTime1 As Date
        Dim ConnString As String = "Provider=SQLOLEDB;Data Source=HENRIQUE-PC;Initial Catalog=BaseDados;Integrated Security=SSPI"

        Dim dateString = DateTimePicker1.Text & " " & DateTimePicker3.Text
        
        Dim dateObject As DateTime = DateTime.ParseExact(dateString, "dd-MM-yyyy HH:mm:ss", New Globalization.CultureInfo("pt-PT"))

        DateTime1 = dateObject
        Q1 = " SELECT  contadores.Data_Hora as Data_Hora, "
        Q1 = Q1 + "ID_Contador as Contador,Nome as Nome, E_SVazio as H_SVazio, E_Vazio as H_Vazio, E_Cheias as H_Cheias, E_Ponta as H_Ponta, "
        Q1 = Q1 + "(E_SVazio+ E_Vazio+ E_Cheias+ E_Ponta) as Total "
        Q1 = Q1 + ", Convert(varchar, contadores.Data_Hora, 105) as horas"
        Q1 = Q1 & " FROM Contadores JOIN DadosContadores ON  Contadores.ID_Contador = DadosContadores.ID "
        Q1 = Q1 & " WHERE  Convert(varchar(10), contadores.Data_Hora, 104) < '" & dateObject & "'"
        Q1 = Q1 & " AND E_SVazio<>0 AND E_Vazio<>0 AND E_Cheias<>0 AND E_Ponta<>0 "
        Q1 = Q1 & "ORDER BY "
        Q1 = Q1 & "contadores.Data_Hora Asc "

        TextBox1.Text = Q1

        Using Con As New OleDb.OleDbConnection(ConnString)
            Con.Open()

            Dim Tabela As New DataTable()

            SQL = Q1

            Dim Da As New OleDb.OleDbDataAdapter(SQL, Con)
            Dim ocb As New OleDbCommandBuilder(Da)
            Da.Fill(Tabela)

            DataGridView1.DataSource = Tabela

        End Using
Link to comment
Share on other sites

Olá

Resolvi desta forma:



            Dim Conn As New SqlConnection(ConnString)

            Dim Cmd As New SqlCommand(Q1, Conn)


            Cmd.Parameters.Add("@Data1", SqlDbType.DateTime).Value = DateTime1
            Cmd.Parameters.Add("@Data2", SqlDbType.DateTime).Value = DateTime2

            Dim DA As New SqlDataAdapter(Cmd)
            Dim DT As New DataTable

            DA.Fill(DT)
            DataGridView1.DataSource = DT

O meu novo problema é o seguinte:

Necessitava de passar a Q1 ou seja a string com a query, para outro formulário, só que, neste caso ela não vai completa. Falta @Data1 e @Data2 que terão que ser passados noutras strings.

Há alguma forma de passar tuda a query completa com as horas para comparação, ou qualquer outra forma de o fazer, para outro formulário?

Cumprimentos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.