Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2008, 21:19   #1
Diablo-IT
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 314
[VB .net 2005] Oggetto DateTime

Ciao a tutti, sto lavorando su un progetto eseguibile con VS .Net 2005, linguaggio VB.

Ho diversi testbox dove all'interno va inserito un valore nel formato HH:MM:SS

Il mio problema e' il seguente:
se ad esempio inserisco 12:36:02 (quindi meno di 24 ore) il tutto funziona,
ma se inserisco invece un valore come 27:11:34 (quindi 27 ore) allora ho un errore.

Una parte di codice che utilizzo ora e' questa :
Codice:
Dim totHMS As New DateTime
totHMS = CType(frmMain.txtUrb.Text, Date))
Ho diverse textbox come questa qua sopra, e con queste textbox devo:
1) convertire il valore in secondi
2) sommare circa 7 textbox come quella ed ottenere un risultato sempre nel formato HH:MM:SS, anche se HH e' maggiore di 24 ore (dove l'oggetto DateTime se faccio la somma delle textbox mi restituisce anche i giorni se HH>24, e non mi accetta il "Ctype(textbox.text, date)" se HH nella textbox e' maggiore a 24).

Come posso fare a risolvere questo problema? Probabilmente sbaglio approccio, ma non riesco ad ottenere nulla senza sporcare il codice in un modo incomprensibile.

Avete qualche suggerimento o esempio di codice scritto bene? Grazie!
Diablo-IT è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 00:19   #2
FixFixFix
Member
 
Iscritto dal: Dec 2008
Messaggi: 82
mettere un handler sulla oneditchange della textbox ? e se uno inserisce nelle prime due cifre un numero > 24 gli metti una messagebox e blocchi il tutto
__________________
Software house Manfriday
FixFixFix è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 02:16   #3
Diablo-IT
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 314
Quote:
Originariamente inviato da FixFixFix Guarda i messaggi
mettere un handler sulla oneditchange della textbox ? e se uno inserisce nelle prime due cifre un numero > 24 gli metti una messagebox e blocchi il tutto
Innanzitutto grazie per il reply.
Il fatto e' che non posso far cosi', dato che il software deve accettare valori anche superiori a 24 ore, come 36:10:24 ad esempio. Mi serve per fare dei conti sulle ore totali di utilizzo di un dato servizio aziendale e dovendosi interfacciare ad un'altra piattaforma/software son costretto ad accettare anche tali valori.

Una soluzione la ho trovata, ma e' decisamente orribile!
Ovvero:
tratto il contenuto della textbox come stringa, tramite le funzioni left, right etc setto tre variabili temporanee che chiamero' ad esempio "a_ore" "a_minuti" "a_secondi" che converto poi da stringa a integer, ci lavoro sopra cosi' e poi le riconverto in stringa, ma mi escono fuori 200 linee di codice incasinatissimo e illeggibile, spererei in una soluzione che in caso di modifiche successive e nel debug non mi faccia impazzire (devo ripetere l'operazione troppe volte nel software per una logica simile). Altre idee? Thanks.
Diablo-IT è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 09:40   #4
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22054
Quote:
Originariamente inviato da Diablo-IT Guarda i messaggi
Innanzitutto grazie per il reply.
Il fatto e' che non posso far cosi', dato che il software deve accettare valori anche superiori a 24 ore, come 36:10:24 ad esempio. Mi serve per fare dei conti sulle ore totali di utilizzo di un dato servizio aziendale e dovendosi interfacciare ad un'altra piattaforma/software son costretto ad accettare anche tali valori.

Una soluzione la ho trovata, ma e' decisamente orribile!
Ovvero:
tratto il contenuto della textbox come stringa, tramite le funzioni left, right etc setto tre variabili temporanee che chiamero' ad esempio "a_ore" "a_minuti" "a_secondi" che converto poi da stringa a integer, ci lavoro sopra cosi' e poi le riconverto in stringa, ma mi escono fuori 200 linee di codice incasinatissimo e illeggibile, spererei in una soluzione che in caso di modifiche successive e nel debug non mi faccia impazzire (devo ripetere l'operazione troppe volte nel software per una logica simile). Altre idee? Thanks.
premetto che lavoro con c# ma essendo .net la soluzione dovrebbe essere simile
allora metti i controlli nell'evento validated (o un suo equivalente)

l'oggetto datetime permette di gestire nativamente ore minuti e secondi. se necessario cmq io porterei tutto in secondi e farei divisione e modulo per 86400 il risultato della divisione lo metterei come incremento dei giorni da una data simbolica di partenza (così la usi per i confronti sui giorni di funzionamento) e il resto è subito convertito nei campi ore minuti e secondi.

non so è più facile farlo che spiegarlo
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 10:36   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Stai usando la classe sbagliata.
La classe DateTime serve per gestire Istanti, date assolute.
E' evidente che 27:15:12 non e' una data assoluta, quanto piu' un delta, una differenza, un periodo.
La classe per gestire tali informazioni e' la TimeSpan.

Puoi infatti scrivere
Codice:
// Dato l'intervallo 35:12:14
TimeSpan ts = new TimeSpan(35,12,14);
Quindi per risolvere il tuo problema io farei qualcosa tipo

Codice:
// Controlli iniziali...
string[] hms = input.Split(new char[]{':'});
if (hsm.Length!=3) throw new Exception(qualcosa)
// altri controlli
TimeSpan ts = new TimeSpan(hms[0], hms[1], hms[2]);
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 11:17   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Diablo-IT Guarda i messaggi
...
Ho diversi testbox dove all'interno va inserito un valore nel formato HH:MM:SS

Il mio problema e' il seguente:
se ad esempio inserisco 12:36:02 (quindi meno di 24 ore) il tutto funziona,
ma se inserisco invece un valore come 27:11:34 (quindi 27 ore) allora ho un errore.

Una parte di codice che utilizzo ora e' questa :
Codice:
Dim totHMS As New DateTime
totHMS = CType(frmMain.txtUrb.Text, Date))
...
Il primo errore che fai è proprio usare DateTime.
Come ti è già stato suggerito, in .NET esiste un tipo molto più adatto a gestire durate temporali anzichè istanti puntiformi : il TimeSpan.

Tra i vari vantaggi che offre ( e te ne do una dimostrazione proprio qui ), la possibilità di sommare intervalli temporali semplicemente, come si sommassero numeri.
Nello specifico, in risposta al tuo quesito ( Somma di n TextBox, che possono rappresentare anche differenze orarie > 24h... ). la risolverei così :

-> Funzioni a livello di Form :

Codice:
   Private Function stringaTS(ByVal TS As TimeSpan) As String

        Dim hh As String = CStr(TS.Days * 24 + TS.Hours)
        Dim mm As String = CStr(TS.Minutes)
        Dim ss As String = CStr(TS.Seconds)
        stringaTS = hh.PadLeft(2, "0") & ":" & mm.PadLeft(2, "0") & ":" & ss.PadLeft(2, "0")

    End Function

    Private Function stringaPerTS(ByVal arg As String) As String

        Dim args() As String = arg.Split(":")
        Dim h As Integer = CInt(args(0))
        Dim g As Integer = 0
        If h > 23 Then
            g = Int(h / 24)
            h = h - (24 * g)
        Else
            stringaPerTS = arg
            Exit Function
        End If
        stringaPerTS = CStr(g) & "." & CStr(h).PadLeft(2, "0") & Strings.Right(arg, 6)

    End Function
-> Codice che esegue la somma di tutte le TextBox :

Codice:
       Dim sommaTS As New TimeSpan(0, 0, 0)
        Dim C As Control
        For Each C In Me.Controls
            If TypeOf (C) Is System.Windows.Forms.TextBox Then
                'Aggiungere eventuali controlli sulle textbox...
                '...
                'MsgBox(stringaPerTS(C.Text))
                Dim TS As New TimeSpan(0, 0, 0)
                TS = TS.Parse(stringaPerTS(C.Text))
                sommaTS = sommaTS + TS
            End If
        Next C
        MsgBox(stringaTS(sommaTS))
Con questo metodo non vai mai in errore, in quanto la Function "stringaPerTS" accomoda l'argomento dato in pasto al metodo .Parse !

Prova...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 11:21   #7
Diablo-IT
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 314
@ Ifazz: grtazie, potrebbe essere una solzione, ma mi piace il codice il piu' pulito/breve possibile (ognnuno ha le sue manie he he).

@gugoXX: che pirla che sono! Grazie! Do un'occhiata ai vari metodi etc di TimeSpan e mi metto all'opera. Mea culpa, in effetti con datetime ci sarei potuto impazzire, appena torno sul pc di sviluppo provo cosi'.

@marcoGG: caspita... pure il codice gia' pronto! Grazie, mi confermi che sbagliavo ad usare DateTime. E' cposi' che mi piace, semplice, conciso e con nessuna o quasi eccezione da gestire (salvo che non inseriscano valori stringa e non mumerici ma lo grestisco facilmente con try/catch). Perfetto.

Grazie a tutti, appena ho finito vi faccio sapere com'e' andata.

Ultima modifica di Diablo-IT : 19-12-2008 alle 11:25.
Diablo-IT è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 12:21   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Diablo-IT Guarda i messaggi
@marcoGG: caspita... pure il codice gia' pronto! Grazie, mi confermi che sbagliavo ad usare DateTime. E' cposi' che mi piace, semplice, conciso e con nessuna o quasi eccezione da gestire (salvo che non inseriscano valori stringa e non mumerici ma lo grestisco facilmente con try/catch). Perfetto.
Già, ovviamente rimane solo da gestire l'input nelle TextBox, che deve essere corretto ( se ci scrivi "patate", "carote" ecc... non funzionerà ).

Se ad esempio hai 3 TextBox con :
01:00:00
01:10:30
25:10:30
restituirà correttamente : 27:21:00

Ma anche se sfori con le ore ( ad esempio nella terza : 125:10:30 )
restituirà correttamente : 127:21:00.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2008, 16:43   #9
Diablo-IT
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 314
Innanzitutto ti ringrazio nuovamente, apprezzo molto chi sa le cose e soprattutto sa condividere la propria conoscenza.

Ho fatto una prova e funziona, ma gia' che ci sono (ormai e' venerdi' e una "beta" la ho consegnata) riscrivo gran parte del codice un po meglio, creando una classe apposita in previsione di futuri upgrade (setup/opzioni etc), ora avendo fretta di far vedere qualcosa ho scritto quella parte del codice non molto object oriented e non mi piace.

Ora ecco saltar fuori un'altro "problemino" importantissimo: la sicurezza!
Di solito utilizzavo chiavi hardware, ma in questo caso (per svariati motivi) non mi e' possibile usare questa soluzione.

Conoscete qualche algoritmo per poter creare chesso', un "codice richiesta attivazione" che verra' visualizzato in una textbox (nello splash screen) basato magari su nome utente/qualcosa dipendentedallamacchina, in modo che l'utente finale mi debba contattare dandomi quel codice per avere un secondo codice da inserire in una seconda textbox per attivare il software?
In questo modo cosi' chi nonautorizzato non potra' utilizzarlo e potro' tener traccia delle varie attivazioni (escludo a priori sistemi di autenticazione tramite server web etc, deve funzionare anche offline).

Corro a cercare sul magico google, ma se avete qualche idea interessante, sparate pure!
Diablo-IT è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2008, 11:15   #10
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22054
Quote:
Originariamente inviato da Diablo-IT Guarda i messaggi
Innanzitutto ti ringrazio nuovamente, apprezzo molto chi sa le cose e soprattutto sa condividere la propria conoscenza.

Ho fatto una prova e funziona, ma gia' che ci sono (ormai e' venerdi' e una "beta" la ho consegnata) riscrivo gran parte del codice un po meglio, creando una classe apposita in previsione di futuri upgrade (setup/opzioni etc), ora avendo fretta di far vedere qualcosa ho scritto quella parte del codice non molto object oriented e non mi piace.

Ora ecco saltar fuori un'altro "problemino" importantissimo: la sicurezza!
Di solito utilizzavo chiavi hardware, ma in questo caso (per svariati motivi) non mi e' possibile usare questa soluzione.

Conoscete qualche algoritmo per poter creare chesso', un "codice richiesta attivazione" che verra' visualizzato in una textbox (nello splash screen) basato magari su nome utente/qualcosa dipendentedallamacchina, in modo che l'utente finale mi debba contattare dandomi quel codice per avere un secondo codice da inserire in una seconda textbox per attivare il software?
In questo modo cosi' chi nonautorizzato non potra' utilizzarlo e potro' tener traccia delle varie attivazioni (escludo a priori sistemi di autenticazione tramite server web etc, deve funzionare anche offline).

Corro a cercare sul magico google, ma se avete qualche idea interessante, sparate pure!
Se non hai bisogno di un elevatissima sicurezza
usa il mac adress della scheda di rete e il nome utente per creare un seed
poi passi per una funzione hash in modo da avere un resultato di lunghezza fissa

quando l'utente ti contatta ti fai dare questo codice lo passi in un algoritmo rsa con una tua bella robusta chiave primaria e gli rimandi il risultato cifrato.

il problema risulta che devi salvare nell'eseguibile o da qualche parte su disco la chiave quindi analizzando la memoria o disassemblando il codice potrebbbero ottenere la chiave
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2008, 17:03   #11
Diablo-IT
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 314
Dopo qualche giorno di ferie rieccomi qua a bestemmiare col Pc.

Il codice funziona perfettamente.
Per quanto riguarda la sicurezza/controllo licenze ho deciso di cambiare totalmente strada.
Non so ancora bene nel dettaglio come fare (ho lavorato pochissimo fino ad ora su interfacce web) ma l'idea da realizzare e' quella di buttare la DLL sul web, crearmi una form web in ASP oppure PHP e non consegnare nessun software, ma soltanto nome utente e password per accedere alla pagina basandomi su un banale file .htaccess o simili.
In questo modo nessun problema per gli aggiornamenti del software o paranoie per clienti che lo passano al collega, segretaria, concorrenza ecc.

Ok, detto questo torno a studiare un po le webforms he he.
Diablo-IT è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
iPhone 18, il mistero sul destino della ...
Motorola lavora al nuovo Razr 70 Ultra: ...
Il programma di ridimensionamento di One...
L'industria statunitense non è co...
La NASA cambia strategia per le missioni...
Mike Fincke, l'astronauta che ha avuto u...
I Meta Ray-Ban Display potrebbero non ar...
La serie di God of War ha trovato l'attr...
Il nuovo iPhone Fold si farà atte...
Ex CEO di Intel furioso verso Wall Stree...
Un foglietto di rame e le prestazioni di...
100 agenti AI per dipendente: quello che...
Le 10 migliori offerte del weekend Amazo...
75'' e 85'' QD-Mini LED: 2 TV interessan...
Offerte Amazon sui componenti hardware P...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v