+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Operazione con orario

  1. #1
    ljt
    ljt non è in linea Scolaretto
    Buongiorno a tutti,

    sto creando un piccolo programma che dovrebbe eseguire delle operazioni in base ad una schedulazione decisa dall'operatore di inizio e fine.
    Il formato ora inizio e ora fine vengono inserite in due textbox, una per l'ora e una per i minuti e poi vengono unite in un campo unico chiamato Ora.
    Il codice utilizzato al momento è il seguente:

            Dim Ora1 = TimeSpan.Parse(Ora)
            Dim Inizio1 = TimeSpan.Parse(Inizio)
            Dim Fine1 = TimeSpan.Parse(Fine)
    
          Select Case Giorno
                Case "lun", "mar", "mer", "gio", "ven"
                    If (Ora1 > Inizio1) Or (Ora1 < Fine1) Then 'Esegue il programma.
                        Return True
                    End If
                Case "sab", "dom"
                    Return True 'Esegue il programma fino a lunedì
            End Select
    
    Il codice postato però non funziona in quanto continua la sua esecuzione anche dopo l'orario di fine impostato dall'utente.
    Ho provato a mettere anche:

    If (Ora1 > Inizio1) and (Ora1 < Fine1) Then 
    ...
    
    ma senza il risultato voluto.
    Da tenere presente che la pianificazione potrebbe essere all'interno dello stesso giorno, come ad esempio dalle 10 alle 15, oppure potrebbe essere dalle 17:00 fino alle 8:00 del giorno dopo.

    Come posso modificare il codice?

    Grazie a tutti.

  2. #2
    Ti conviene indicare data e ora completi di inizio e fine e lavorare sulle due informazioni (data+ora)
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    Il timespan non è adatto, serve per rappresentare un intervallo temporale, come ad esempio “la differenza” tra 2 date.

    Come suggerito da Antonio, utilizza direttamente delle date
    ℹ️ Leggi di più su Fix ...

  4. #4
    ljt
    ljt non è in linea Scolaretto
    Grazie per la risposta.

    purtroppo la schedulazione viene fatte in base oraria e non giornaliera. Cioè le istruzioni devono essere eseguite, ad esempio a partire dalle ore 17:00 di oggi fino alle ore 8:00 di domani dal lunedì al venerdì, salvo sabato e domenica che devono essere sempre eseguite.
    Se utilizzassi anche la data la pianificazione avverrebbe, ad esempio dalle ore 17 del 23/03/2021 alle ore 8 del 24/03/2021 e basta.

    Non esiste una scappatoia?

    Grazie ancora

  5. #5
    ljt
    ljt non è in linea Scolaretto
    Quote Originariamente inviato da Fix Visualizza il messaggio
    Il timespan non è adatto, serve per rappresentare un intervallo temporale, come ad esempio “la differenza” tra 2 date.

    Come suggerito da Antonio, utilizza direttamente delle date
    si in effetti non ha nessun senso usare il timespan

    Grazie

  6. #6
    Se la costante è l'orario, allora il TimeSpan potrebbe andare bene.

            Dim D As Date
    D = D.AddHours(13)

    Select Case Now.DayOfWeek

    Case DayOfWeek.Monday

    ....

    Case DayOfWeek.Tuesday

    If D.TimeOfDay < Now.TimeOfDay Then
    Console.WriteLine(D.TimeOfDay)
    End If

    Case .....

    Case .....


    End Select



    Il codice è volutamente non conforme a quanto richiesto
    ℹ️ Leggi di più su Fix ...

  7. #7
    ljt
    ljt non è in linea Scolaretto
    Ieri nel frattempo ho fatto questo:

    case (orainizio - orafine) > 0
            (orattuale > orainizio) or (orattuale < orafine) = true
            esegue il codice
    
    case (orainizio - orafine) < 0 
           (orattuale > orainizio) and( orattuale < orafine) = true
           esegui il codice
    end select
    
    L'ho messo in debug e vediamo se funziona.
    La motivazione del doppio controllo è data dal fatto che l'utente può scegliere di mandare in esecuzione la procedura anche dalla 18:00 alle 20:00 oppure dalle 3:00 alle 5:00 dello stesso giorno.

    A questo punto, come suggerito da Fix il timespan torna utile.

    Accetto molto volentieri commenti e miglioramenti al codice.

    Grazie ancora.

  8. #8
    ljt
    ljt non è in linea Scolaretto
    Quote Originariamente inviato da Fix Visualizza il messaggio
    Se la costante è l'orario, allora il TimeSpan potrebbe andare bene.

            Dim D As Date
    D = D.AddHours(13)

    Select Case Now.DayOfWeek

    Case DayOfWeek.Monday

    ....

    Case DayOfWeek.Tuesday

    If D.TimeOfDay < Now.TimeOfDay Then
    Console.WriteLine(D.TimeOfDay)
    End If

    Case .....

    Case .....


    End Select



    Il codice è volutamente non conforme a quanto richiesto
    Grazie per il "semi" aiuto
    E io che pensavo che postare in un forum servisse ad avere la pappa pronta. Peccato....

    Battute a parte ho guardato il tuo codice e da quello che ho capito aggiungi 13 ore ad una data e se minore dell'ora attuale esegue il codice.

    Giusto?

    Prima di dire altre cavolate chiedo conferma di quello che ho detto.

    Grazie

  9. #9
    Si, corretto.

    Dovendo gestire solo l'orario, basta aggiungere ORE, MINUTI, SECONDI alla DATA di Default (01/01/0001 00:00:00) e successivamente estrarre (e confrontare) il TimeSpan dell'orario (TimeOfDay) con quello corrente.

    I giorni della settimana li confronti tramite l'enumeratore DayOfWeek.

    Penso che così hai tutto quello che ti serve.

    In merito alla logica del codice, se l'orario di Inizio e Fine è sempre nella stessa giornata (come ho inteso io), la verifica da fare solo 1:

    Se "adesso" è maggiore dell'"orario di inizio" EDANCHE "adesso" è minore dell'"orario di fine" ALLORA fai questo

    EDANCHE corrisponde all'operatore logico AndAlso che verificherà la seconda condizione solo se la prima è valida. Se "adesso" è minore dell'"ora di inizio" è inutile verificare se è anche minore di "orario di fine" perchè comunque non rientra nel range previsto.
    Ultima modifica di Fix; 24-03-2021 13:59 
    ℹ️ Leggi di più su Fix ...

  10. #10
    ljt
    ljt non è in linea Scolaretto
    Quote Originariamente inviato da Fix Visualizza il messaggio
    In merito alla logica del codice, se l'orario di Inizio e Fine è sempre nella stessa giornata (come ho inteso io), la verifica da fare solo 1:

    Se "adesso" è maggiore dell'"orario di inizio" EDANCHE "adesso" è minore dell'"orario di fine" ALLORA fai questo

    EDANCHE corrisponde all'operatore logico AndAlso che verificherà la seconda condizione solo se la prima è valida. Se "adesso" è minore dell'"ora di inizio" è inutile verificare se è anche minore di "orario di fine" perchè comunque non rientra nel range previsto.
    Al momento ho modificato nel seguente modo, aggiungendo AndAlso come da te suggerito:
    Dim Giorno As String = DateTime.Now.ToString("ddd") 'Inseire ("dddd")
    
            Dim Inizio As TimeSpan = TimeSpan.Parse(txtHhInizio.Text & ":" & txtMmInizio.Text)
            Dim Fine As TimeSpan = TimeSpan.Parse(txtHhFine.Text & ":" & txtMmFine.Text)
    
            Select Case Giorno
                Case "lun", "mar", "mer", "gio", "ven"
                    If Inizio < Fine Then
                        If ((Now.TimeOfDay > Inizio) AndAlso (Now.TimeOfDay < Fine)) Then
                            Return True
                        End If
                    Else
                       ((Now.TimeOfDay > Inizio) Or (Now.TimeOfDay < Fine))
                        Return True
                    End If
                Case "sab", "dom"
                    Return True 
            End Select
    
            Return False
    
    Al momento il tutto è in fase di debug.
    E come dico sempre sono ben accetti commenti e suggerimenti.

    Dovendo gestire solo l'orario, basta aggiungere ORE, MINUTI, SECONDI alla DATA di Default (01/01/0001 00:00:00) e successivamente estrarre (e confrontare) il TimeSpan dell'orario (TimeOfDay) con quello corrente.

    I giorni della settimana li confronti tramite l'enumeratore DayOfWeek.

    Penso che così hai tutto quello che ti serve.
    Questo tuo suggerimento al momento non l'ho ancora verificato, ma lo farò.

    Al momento grazie mille.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Confronto data con orario con altro orario
    Da Marius44 nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 05-09-2018, 17:11
  2. Operazione con Timeout
    Da Headphone nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 25-02-2010, 11:58
  3. Operazione con stringa
    Da willysmb nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 13-10-2006, 11:08
  4. orario...
    Da simplyme84 nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 03-12-2004, 17:03
  5. Orario in centesimi
    Da lord_k3y nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 23-12-2003, 10:57