Italian giorni utili

Nikeddy

Active Member
Licensed User
Longtime User
Salve, vorrei creare semplicemente un elenco con gli anni (2016-2015-2014) che si seleziona, si preme un bottone "scopri i giorni utili" e lui ti da i giorni di quell'anno lavorativi.

esiste la funzione?

con vb io facevo:

B4X:
Public Function SkipHolidays(data As Variant, Optional forward As Boolean = True) As Variant

Dim d As Integer

d = 1

if not forward then d = -1

do while IsHoliday(data) or IsWeekend(data)

  data = data + 1

Loop

SkipHolidays = data

End Function
 

Nikeddy

Active Member
Licensed User
Longtime User
e se ho nel database tanti record quanti sono i giorni utili di un anno (praticamente immagina le timbrature di tutte le persone di una azienda)

come faccio a far contare i singoli giorni? (avrei cosi di riflesso tutti i giorni utili, dal primo del db all'ultimo del db)

mi serve sapere per poter fare poi un rapporto (ad esempio numero di timbrature / numero di giorni totali)
 

LucaMs

Expert
Licensed User
Longtime User
La cosa del db non mi è chiara, nel senso che non so cos'hai, ma per contare dei record che contengano qualcosa c'è la funzione SQL Count.

Con "giorni utili" suppongo che tu intenda "giorni lavorativi", escludendo sabato-domenica (c'è anche gente che lavora nel fine settimana, soprattutto di questi tempi) e appunto giorni festivi.

Non c'è un metodo semplicissimo e già pronto.

Intanto esistono gli anni bisestili, per cui anziché avere 365 giorni in un anno ne hai 366.

Poi, come dicevo, le festività cambiano da Nazione a Nazione e anche di anno in anno (Pasqua e Pasquetta, ad esempio).


Infine, non tutti sanno che l'11 ottobre è festa! (mio compleanno :p)
 

Nikeddy

Active Member
Licensed User
Longtime User
eheheheheheh grande!

quindi se ho capito bene, se raggruppo per giorni, dovrei avere il numero di giorni presenti nel db?
 

MarcoRome

Expert
Licensed User
Longtime User
B4X:
Sub Process_Globals
   Private NativeMe As JavaObject
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)

    NativeMe.InitializeContext
   
    DateTime.DateFormat = "MM-dd-yyyy"
  
    Dim datapartenza As Long = DateTime.DateParse("01-01-2018")
    Dim dataarrivo As Long =  DateTime.DateParse("12-31-2018")

    Dim totale_giorni As Int = NativeMe.RunMethod("calcola", Array(datapartenza,dataarrivo))
   Log(totale_giorni) 'Return Days Working
End Sub
   


Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


#if JAVA

import java.util.Calendar;
import java.util.Date;


public int calcola(Long datapartenza, Long dataarrivo) {

        Date startDate = new Date(datapartenza);
        Date endDate = new Date(dataarrivo);
        int workdays = getWorkingDaysBetweenTwoDates(startDate, endDate);
        return workdays;


}

  public int getWorkingDaysBetweenTwoDates(Date startDate, Date endDate) { 
    Calendar startCal; 
    Calendar endCal; 
    startCal = Calendar.getInstance(); 
    startCal.setTime(startDate); 
    endCal = Calendar.getInstance(); 
    endCal.setTime(endDate); 
    int workDays = 0; 

    //Return 0 if start and end are the same 
    if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) { 
        return 0; 
    } 

    if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) { 
        startCal.setTime(endDate); 
        endCal.setTime(startDate); 
    } 

    do { 
        startCal.add(Calendar.DAY_OF_MONTH, 1); 
        if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY  
       && startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) { 
            ++workDays; 
        } 
    } while (startCal.getTimeInMillis() < endCal.getTimeInMillis()); 

    return workDays; 
}



#End If
 
Top