Jump to content

[RESOLVIDO] Contar os dias uteis entre 2 datas C++


joao.palma
 Share

Recommended Posts

Boa Tarde... 🙂

O meu problema é o seguinte:

Um funcionario só pode faltar X dias.

Esse funcionario pode tirar os dias todos de ferias ou ir tirando...

O que eu não sei é como vou contar os dias úteis  entre as 2 datas... 😞

Estou a utilizar o Borland Developer Studio linguagem C++ 🙂

alguém me pode ajudar???

Link to comment
Share on other sites

// diferença entre as duas datas
int dif;
// numero de semanas
int nsem;
// numero a subtrair
int nsub
// numero dias uteis
int duteis;

//calcula numero de semanas
nsem = dif/7;

// calcula numero de dias a subtrair
nsub = nsem * 2;

// calcula numero de dias uteis
duteis = dif - nsub

como és novo em c++ não usei funções, fiz o código mas simples que consegui  😛

mas não está totalmente correcto, pois este código está simples de mais, pois apenas funciona com o numero de dias 7,14,21, etc, se quiseres que te ajude a desenvolver é só pedir

Link to comment
Share on other sites

@Aqua Costa

Obrigado...

tambem ja tava a pensar em fazer um ciclo e verificar se era dia de semana ou fim de semana ou feriado...

Tipo:

Para data1 ate data2 fazer

if (dayofweek(strtodate(edit1.text)))=1 then

{

    dif=dif-1

    else

      if (dayofweek(strtodate(edit1.text)))=7 then

          dif=dif-1

}

e depois criar uma tabela para feriados e verificar os feriados.... o que achais deste codigo?

Link to comment
Share on other sites

Não sei se funciona mesmo com a syntax correcta.

Vou-te explicar uma coisa sobre o c++, só usas "=" se estiveres a atribuir valores, se queres comparar usas "=="

depois, (desmintam-me se tiver enganado) no c++ não usas then, e se apenas queres retirar uma unidade ao dif, podes fazer só dif--; ou --dif;

ainda que o código funciona-se, com tantos erros não executava, o código corrigido é

if (dayofweek(strtodate(edit1.text))==1)
    dif--;
else
    if (dayofweek(strtodate(edit1.text))==7)
        dif--;

Ainda assim acho que deverias ponderar usar apenas contas para o teu caso, se tens o  numero de dias retiras apenas fins de semana e feriados. Penso ser mais simples para uma futura compreensão.

Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***

Link to comment
Share on other sites

Se não estou em erro esta o que esta função faz é:

Da o numero da semana a partir de uma data. Retorna de 1 a 7, sendo que 1 é domingo e 7 é sábado...

Ex.  26/02/2009 retorna 5! ou seja quinta-feira...

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.businessobjects.integration.eclipse.designer.doc/designer/Functions169.html

http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx

http://docserver.userland.com/date/dayOfWeek

http://www.devmedia.com.br/articles/viewcomp.asp?comp=869

Nota: Também não sei bem como é pk foi um colega meu k me disse... Mas depois de uma pesquisa acho que ele tem razão...

Link to comment
Share on other sites

Boas... desde já o meu muito obrigado a todos...

Já consegui fazer a parte dos fim de semanas agora só falta mesmo os feriados...

O código abaixo é copy & past do programa....

//Significados...
//Table1 = tabela
//DtAux = Variavel(uma terceira variavel que vai armazenar a data corrente....)
for (DtAux = Table1DtIni->AsDateTime ; DtAux <= Table1DtFin->AsDateTime; DtAux++) {
		if (DtAux.DayOfWeek() == 1){
			Table1DtDif->AsFloat=Table1DtDif->AsFloat-1;
			ttdflt=ttdflt-1;}
		else {
			if (DtAux.DayOfWeek()== 7){
				Table1DtDif->AsFloat=Table1DtDif->AsFloat-1;
				ttdflt=ttdflt-1;}}
	}

Agora só falta mesmo os feriados mas acho que isso é só mais uma tabela um for e um if e ta feito acho eu...

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.