Como comparar datas no vb.net

I want to compare just the date part (and Not the time) of two VB.NET Date objects. Is there a way to do that?

Fiz uma função para comparação de datas. Ela compara a data de um input com uma coluna de datas de um datatable. Segue o código:

Public Shared Function GetNextDiaUtil(d As Date) As Date Dim feriados As DataTable = ManipulaDB.ConsultaSql("SELECT CAMPO2 FROM TAB_FERIADOS") If d.DaysOfWeek = DaysOfWeek.Saturday Then d = d.AddDays(2) ElseIf d.DayOfWeek = DaysOfWeek.Sunday Then d = d.AddDays(1) End If For Each data As DataRow In feriados.Rows If d.Equals(CDate(data.ToString)) Then d = d.AddDays(1) End If Next Return d End Function

O seguinte erro é lançado: Conversion from string "System.Data.DataRow" to type 'Date' is not valid. Se no lugar de data.ToString colocar uma string como 07-09-2021 é feita a comparação corretamente. Como comparo um type Date com um DataRow?

3

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900

Em Visual Basic.Net , as lojas do tipo variável de data a data ea hora com uma precisão de menos de um milésimo de segundo. Às vezes isso é difícil de lembrar uma vez que o tipo de dados é chamado simplesmente de uma data. A outra armadilha para se lembrar é que o Net Framework . Nem sempre é consistente ao armazenar datas e às vezes inclui a hora do dia em que parece lógico que somente a data deve ser armazenado. Felizmente, você pode facilmente comparar uma data com VB.NET , seguindo alguns passos simples. Coisas que você precisa Microsoft Visual Basic Express 2010 Visual Studio 2010, 2008 ou 2005 Show Mais instruções

1

Abra o Visual Studio ou VB Express. Criar um novo projeto de formulário do Windows Visual Basic . Clique em "Arquivo ", seguido de "New". A janela "New Project " irá aparecer. Escolha " Visual Basic, Windows" a partir da exibição de árvore , e depois escolher "Projeto Windows Form. " Nomeie o projeto " DateTest " e clique em OK. Após uma pequena espera , a janela de designer de formulário aparecerá.
2

Clique no ícone " Ferramentas " na barra de ferramentas , e depois esperar para a caixa de ferramentas para abrir . Arraste um " DateTimePicker " para o formulário. Botão direito do mouse sobre a data e , em seguida, escolha a opção " Propriedades". Nomeie-o " dtDate ", altere a propriedade " Format" para "Short " ea propriedade "largura " para " 100 ". Clique na tecla "Escape" para fechar a janela "Propriedades" .
3

Arraste um botão da caixa de ferramentas para o formulário. Nomeie-o " btnView ", e alterar a propriedade "texto" para "View ". Dê um duplo clique no botão para criar um manipulador de eventos , em seguida, adicione o seguinte código para o manipulador :

Private Sub btnView_Click (sender System.Object , ByVal e As System.EventArgs ) Handles btnView.Click

MsgBox ( dtDate.Value.ToString )

End Sub
4

Clique na tecla "F5" para executar o programa . Quando o formulário for exibido, clique no botão "Exibir" , sem alterar a data. Note como a data ea hora aparecem mesmo que apenas a data apareceu no " DateTimePicker ".
5

Feche o programa , clicando no "X" no canto superior direito, e depois voltar para exibição de design . Arraste outro botão da caixa de ferramentas para o formulário. Chame o botão " btnToday ", e altere a propriedade de texto para "Hoje". Dê um duplo clique no botão "Today" para criar outro manipulador de eventos e , em seguida, adicione o seguinte código : Private Sub

btnToday_Click (sender System.Object , ByVal e As System.EventArgs ) Handles btnToday.Click

Dim msg As String = " A data inserida ( "

Msg & = Date.Today.ToShortDateString

msg & = " ) é "

Se dtDate.Value < Date.Today Então

Msg & = "menos do que "

ElseIf dtDate.Value = Date.Today Então

msg & = " partidas "

ElseIf dtDate.Value > Date.Today Então

msg & = "maior que"

End If

msg & = "Hoje ("

msg & = Date.Today.ToShortDateString

msg & = ")"

MsgBox ( msg)

End Sub
6

Clique em " F5" para executar o programa e, em seguida, clique no botão "Today" , quando o formulário é exibido. Note como a mensagem que aparece diz que a data inserida (hoje) é maior do que hoje. Novamente , isto é causado pelo tempo que foi adicionado pelo controle " DateTimePicker " . Corrigir o programa , alterando as comparações com a seguinte redacção :

Se dtDate.Value.Date < Date.Today Então
7

Clique em " F5 " mais uma vez para iniciar a programa e , em seguida, clique no botão "Today" para ver que as datas coincidem.

DateTime.Compare(Data1, Data2)

Se retornar -1 a Data1 é menor

Se retornar 1 a Data1 é maior

Se retornar 0 são iguais


Leonardo tenho uma duvida nisso

quero comparar datas tbm, mas aniversários

ou seja gravarei no banco uma data por exemplo

"30/10/1992"

usarei essa função hoje 9/12/2011, e ela me dará -1 correto, pois dia 30/10/2011 ja passou mas e ano que vem?

ela me dara -1 tbm? ou chegando dia 30/10/2012 ela vai ser igual a 0?

queria enteder isso melhor

aguardo.

Jean Felipe Email: Twitter: @JeanFelipe_

public: static int Compare(DateTime t1, DateTime t2); public static int Compare (DateTime t1, DateTime t2); static member Compare : DateTime * DateTime -> int Public Shared Function Compare (t1 As DateTime, t2 As DateTime) As Integer Int32

A signed number indicating the relative values of t1 and t2.

Value Type Condition
Less than zero t1 is earlier than t2.
Zero t1 is the same as t2.
Greater than zero t1 is later than t2.

Examples

The following example demonstrates the Compare method.

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0); int result = DateTime.Compare(date1, date2); string relationship; if (result < 0) relationship = "is earlier than"; else if (result == 0) relationship = "is the same time as"; else relationship = "is later than"; Console.WriteLine("{0} {1} {2}", date1, relationship, date2); // The example displays the following output for en-us culture: // 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM let date1 = DateTime(2009, 8, 1, 0, 0, 0) let date2 = DateTime(2009, 8, 1, 12, 0, 0) let result = DateTime.Compare(date1, date2) let relationship = if result < 0 then "is earlier than" elif result = 0 then "is the same time as" else "is later than" printfn $"{date1} {relationship} {date2}" // The example displays the following output for en-us culture: // 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM Module Example Public Sub Main() Dim date1 As Date = #08/01/2009 12:00AM# Dim date2 As Date = #08/01/2009 12:00PM# Dim result As Integer = DateTime.Compare(date1, date2) Dim relationship As String If result < 0 Then relationship = "is earlier than" ElseIf result = 0 Then relationship = "is the same time as" Else relationship = "is later than" End If Console.WriteLine("{0} {1} {2}", date1, relationship, date2) End Sub End Module ' The example displays the following output: ' 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

Remarks

To determine the relationship of t1 to t2, the Compare method compares the Ticks property of t1 and t2 but ignores their Kind property. Before comparing DateTime objects, ensure that the objects represent times in the same time zone.

Applies to

  • CompareTo(Object)
  • Equals(Object)

Última postagem

Tag