Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cintiadel

[Resolvido] quinto dia util do mes seguinte

Recommended Posts

Se não pode passar a data chapada, passe suas variáveis, o Oenning só postou um exemplo.

 

Abraços...

só n to sabendo o q passar como ja disse...

e tbm onde adicionar o mes

segue o codigo, por favor me ajude a corrigir:

no load:

Dim dt As String
		dt = RetornaQuintoDiaUtil(New Date(2009, 5, 1))
		lbl_msg_superior.Text =  dt

funções

Private Shared Function RetornaQuintoDiaUtil(ByVal Data As DateTime) As String
		Dim primeiroDiaUtil As Int32 = RetornaPrimeiroDiaUtil(Data)

		Dim auxDiasUteisLocalizados As Int32 = 1
		Dim auxContadorDiaVerificados As Int32 = 1
		Dim quintoDiaUtil As DateTime = DateTime.Now
		Dim dataPrimeiroDiaUtil As New DateTime(Data.Year, Data.Month, primeiroDiaUtil)

		While auxDiasUteisLocalizados < 5
			quintoDiaUtil = dataPrimeiroDiaUtil.AddDays(auxContadorDiaVerificados)

			If VerificaDiaUtil(quintoDiaUtil) Then
				auxDiasUteisLocalizados += 1
			End If

			auxContadorDiaVerificados += 1
		End While

		'Return quintoDiaUtil.Day.ToString()
		Return quintoDiaUtil.Day.ToString() & "/" + quintoDiaUtil.Month.ToString() & "/" & quintoDiaUtil.Year.ToString()
	End Function 'RetornaQuintoDiaUtil

	Private Shared Function RetornaPrimeiroDiaUtil(ByVal Data As DateTime) As Integer
		Dim primeiroDiaMes As New DateTime(Data.Year, Data.Month, 1)

		While Not VerificaDiaUtil(primeiroDiaMes)
			primeiroDiaMes = primeiroDiaMes.AddDays(1.0F)
		End While

		Return primeiroDiaMes.Day
	End Function 'RetornaPrimeiroDiaUtil

	Private Shared Function VerificaDiaUtil(ByVal DiaMes As DateTime) As Boolean
		If DiaMes.DayOfWeek = DayOfWeek.Saturday Or DiaMes.DayOfWeek = DayOfWeek.Sunday Or VerificaFeriado(DiaMes) Then
			Return False
		End If
		Return True
	End Function 'VerificaDiaUtil

	Private Shared Function VerificaFeriado(ByVal DiaMes As DateTime) As Boolean
		'Código para verificar se uma data passada como parâmetro é feriado de acordo com banco 
		'de dados ou WebService

		Dim conexao As New Data.SqlClient.SqlConnection("conexao")
		Dim comando As New Data.SqlClient.SqlCommand
		Dim drferiado As Data.SqlClient.SqlDataReader

		conexao.Open()
		comando.Connection = conexao
		comando.CommandText = "Select dtferiado from feriados2 where dtferiado = '" & DiaMes.ToString("yyyy-MM-dd") & "'"
		drferiado = comando.ExecuteReader()

		If drferiado.Read() Then
			Return True
		Else
			Return False
		End If

		drferiado.Close()
		conexao.Close()
		Return False
	End Function 'VerificaFeriado
End Class 'Program

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar o ano corrente você usa DateTime.Today.Year.

Para o próximo mês você usa DateTime.Today.Month + 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar o ano corrente você usa DateTime.Today.Year.

Para o próximo mês você usa DateTime.Today.Month + 1.

o problema é onde eu faço isso????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar o ano corrente você usa DateTime.Today.Year.

Para o próximo mês você usa DateTime.Today.Month + 1.

enfim consegui resolver, segue a solução:

no load

Dim dt As String
		dt = RetornaQuintoDiaUtil(New Date(2009, 5, 1))
		lbl_msg_superior.Text =  dt

Funções:

Private Shared Function RetornaQuintoDiaUtil(ByVal Data As DateTime) As String
		Dim primeiroDiaUtil As Int32 = RetornaPrimeiroDiaUtil(Data)
		Dim auxDiasUteisLocalizados As Int32 = 1
		Dim auxContadorDiaVerificados As Int32 = 1
		Dim mes As Int32 = Now.AddMonths(1).Month
		Dim quintoDiaUtil As DateTime = DateTime.Now
		Dim dataPrimeiroDiaUtil As New DateTime(Data.Year, mes, primeiroDiaUtil)

		While auxDiasUteisLocalizados < 5
			quintoDiaUtil = dataPrimeiroDiaUtil.AddDays(auxContadorDiaVerificados)
			If VerificaDiaUtil(quintoDiaUtil) Then
				auxDiasUteisLocalizados += 1
			End If
			auxContadorDiaVerificados += 1
		End While

		Return quintoDiaUtil.ToString("dd/MM/yyyy")
	End Function 'RetornaQuintoDiaUtil

Private Shared Function RetornaPrimeiroDiaUtil(ByVal Data As DateTime) As Integer
		Dim primeiroDiaMes As New DateTime(Data.Year, Now.AddMonths(1).Month, 1)

		While Not VerificaDiaUtil(primeiroDiaMes)
			primeiroDiaMes = primeiroDiaMes.AddDays(1.0F)
		End While

		Return primeiroDiaMes.Day
	End Function 'RetornaPrimeiroDiaUtil

Private Shared Function VerificaDiaUtil(ByVal DiaMes As DateTime) As Boolean
		If DiaMes.DayOfWeek = DayOfWeek.Saturday Or DiaMes.DayOfWeek = DayOfWeek.Sunday Or VerificaFeriado(DiaMes) Then
			Return False
		End If
		Return True
	End Function 'VerificaDiaUtil

aqui ele verifica se existe o feriado cadastrado na minha tabela:

Private Shared Function VerificaFeriado(ByVal DiaMes As DateTime) As Boolean
		'Código para verificar se uma data passada como parâmetro é feriado de acordo com banco 
		'de dados ou WebService

		Dim conexao As New Data.SqlClient.SqlConnection("conexao")
		Dim comando As New Data.SqlClient.SqlCommand
		Dim drferiado As Data.SqlClient.SqlDataReader

		conexao.Open()
		comando.Connection = conexao
		comando.CommandText = "Select dt from feriados where dt = '" & DiaMes.ToString("yyyy-MM-dd") & "'"
		drferiado = comando.ExecuteReader()

		If drferiado.Read() Then
			Return True
		Else
			Return False
		End If

		drferiado.Close()
		conexao.Close()
		Return False
	End Function 'VerificaFeriado

enfim tópico resolvido

agradeço ao quintelab, Oenning e ao Juliano.net pela paciencia e ajuda que me deram...valeu mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.