Newsgroup: it.comp.lang.visual-basic
Titolo: ?] datediff dateadd

Ciao come posso fare a trovare la data di inizio e la data ultima di una
settimana a cui appartiene una data  a caso che inserisce l'utente?
lo stesso per il mese ini e fine .
Ho fatto un migliardo di prove con  format, datediff ,dateadd ma mi sono
persa! e poi mi diventa una cosa esagerata.... impossibile mi dico che sia
cosi' elaborato ma.....? bo
Aiutatemi grazie
anna

 lo stesso per il mese ini e fine .
  Dim g   As Date
  Dim si  As Date
  Dim sf  As Date
  Dim mi  As Date
  Dim mf  As Date
  g = Date
  si = DateAdd("d", -((Weekday(g, vbMonday) - 1) Mod 7), g)
  sf = DateAdd("d", 6, si)
  mi = DateSerial(Year(g), Month(g), 1)
  mf = DateSerial(Year(g), Month(g) + 1, 0)
  Debug.Print Format$(g, "dddd d mmmm yyyy", vbMonday)
  Debug.Print
  Debug.Print Format$(si, "dddd d mmmm yyyy", vbMonday)
  Debug.Print Format$(sf, "dddd d mmmm yyyy", vbMonday)
  Debug.Print
  Debug.Print Format$(mi, "dddd d mmmm yyyy", vbMonday)
  Debug.Print Format$(mf, "dddd d mmmm yyyy", vbMonday)
  Debug.Print
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

   Debug.Print Format$(g, "dddd d mmmm yyyy", vbMonday)
    Scrivi invece:
    Debug.Print Format$(g, "dddd d mmmm yyyy")
    Scusate. Questi inutili vbMonday sono rimasti appesi a causa di un mio
copia/incolla mal fatto.


 cosi' elaborato ma.....? bo
Albert diceva "non esistono soluzioni semplici, ma solo soluzioni _pių_
semplici [di altre]".
Hai visto com'era facile?
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 DataFine =  Data- WeekDay(Data) + VbDayOfWeek.vbMonday + 6
    E... se un bel giorno cambiano il valore della costante vbMonday?...
--
Ciao :-)))


     E... se un bel giorno cambiano il valore della costante vbMonday?...
Beh, piuttosto improbabile, anche perchè VB non avrà versioni future :)
E comunque non importerebbe, perchè a quel punto varierebbe anche il valore
di WeekDay().
Ciao

 valore di WeekDay().
    Dato che siamo nel campo delle ipotesi potremmo anche ipotizzare il
contrario, pero'.
    Ma, tutto sommato, la questione di maggior rilevanza --di principio,
diciamo-- per me e' il fatto di usare il valore di una costante predefinita,
per definizione "incostante", come costante di un calcolo.
--
Ciao :-)


 per definizione "incostante", come costante di un calcolo.
Non sono assolutamente polemico, solo ignorante: che differenza c'è ad
utilizzare il valore di una costante (incostante) in un calcolo, o
utilizzarla come argomento della funzione? Se cambia, non cambia per tutti e
due?
Grazie per il chiarimento
Salutoni
Sergio

 due?
    Prova tu a fare una funzione "Pippo" con argomento "Pluto" di tipo Long.
Il valore di "Pluto" puo' essere -1 o 0. Allo scopo predisponi delle
costanti enumerate, diciamo "Paperino = -1" e "Topolino = 0". Poi fai una
nuova versione e per espandere le funzionalita' di "Pippo" decidi di
aggiungere le costanti "Minnie" e "Clarabella" ma, chissa' per quali motivi,
sei costretto a rivoluzionare le cose e risulta:
        Paperino = -2
        Topolino = -1
        Minnie = 0
        Clarabella = 1
    I valore di ritorno di Pippo, passando le costanti Paperino e Topolino,
sara' uguale a quello ritornato dalla vecchia versione.
    Sicuramente questo modo di fare e' un comportamento "scorretto" ma credo
che dall'alba dell'informatica ad oggi si sia visto anche di molto peggio di
questo.
    Sta di fatto che la creazione da parte tua di tali costanti e' un
"patto" con l'utilizzatore *relativo* alla funzionalita' di "Pippo", non un
"patto" *assoluto*. Non gli stai dicendo: "amico, invece di scrivere 0
scrivi Topolino". No, gli stai dicendo: "se vuoi ottenere un certo valore da
'Pippo' invece di scrivere un numero non autoesplicativo, scrivi piuttosto
'Topolino' ed io mi impegno a fare in modo che ogni volta che passi
l'argomento 'Topolino' il comportamento di 'Pippo' sara' costante".


 ha scritto nel messaggio
news:am7ea6$3eek7$1...@ID-52090.news.dfncis.de...

Fino a qui è chiaro, io però intendevo "Argomento" non come valore di
ritorno della funzione, ma come dato passato alla funzione (se ho commesso
un errore semantico chiedo umilmente perdono).
La situazione che mi prospettavo è (sarebbe) la seguente:
una funzione del tipo.
public function Pippo(id as myEnumerator1) as Myenumerator2
....
end function
e supponiamo che sia contenuta in una DLL....
mettiamo definizione del myEnumerator1 (per le stesse ragioni da te sopra
indicate) cambi:
se io ricompilo il mio sorgente che utilizza la funzione tutto si mette a
posto (credo)
se io NON ricompilo il mio sorgente, e chi ha fatto la DLL non ne ha
cambiato il numero di versione, tutto sembra andare bene, tranne che la
funzione "funziona" alla piripicchio.
E' corretto il ragionamento? C'è qualche baco logico?
Grazie ancora, comunque
Salutoni
Sergio

 Grazie ancora, comunque
--


 ha scritto nel messaggio
news:am7igo$3f6m4$1...@ID-52090.news.dfncis.de...[cut e stracut]
Ok, sottile differenza colta: se una cosa coincide, ma nessuno ha dichiarato
ufficialmente che coincide, non hai alcuna garanzia che in futuro sia
cosě.... Giusto
Perchč piů si impara piů si scopre di dover imparare?
Grazie

 Perchč piů si impara piů si scopre di dover imparare?
    Perche' funziona cosi'.
    Io, per esempio, non ho nessuna voglia di rileggere questo 3d perche' ho
la spiacevole sensazione di aver scritto, ad un certo punto, una puttanata.
Ma nessuno lo ha ancora fatto notare quindi i casi sono tre, una volta
tanto: o non e' vero (magari!), o chi ci sta leggendo non ci ha fatto caso
(improbabile) e non ha voglia di perder tempo con noi (peccato), oppure ci
stiamo leggendo solo tu ed io. Boh?...


 stiamo leggendo solo tu ed io. Boh?...
Credo che forse l'argomento der thread sia diventato un po' troppo
"teorico", stile discussione sul sesso degli angeli, e che quindi abbia
perso l'interesse di molti, è il bello (e il brutto) della piazza
telematica.
Salutoni
Sergio

 telematica.
Se vi può far piacere io ho seguito l'intero 3d
Però la puttanata di Borrelli non l'ho proprio notata, ma io su queste
discussioni, iperteoriche come giustamente tu affermi, difficilmente mi
addentro, non sono abbastanza colto per interagire, quindi ascolto in
silenzio e spesso non capisco nemmeno tutto.
:-)

>> non e' vero.
Invece e' "praticamente" vero. WeekDay restituisce il valore Integer
della corrispondente costante vbDayOfWeek (in fondo all'help di
WeekDay).
In ogni caso il discorso di Maurizio fila liscio: usare una costante
come parametro di una funzione ti "garantisce" che la funzione si
comportera' "sempre" allo stesso modo. Il corrispondente valore potrebbe
invece cambiare. Usare una costante di cui si conosce il valore in un
calcolo "puo' essere" pericoloso, nel senso che al cambio del valore
della costante il calcolo "potrebbe" non tornare piu'.
Un esempio pratico si ha nei booleani VB6 vs. 
VB.NET
 (*).
In VB
    True = -1
    False = 0
in 
VB.NET
    True = 1
    False = 0
(*) Tralasciando il fatto che non si puo' usare un programma VB6 (as is)
in 
VB.NET
 e che bisogna essere un po' suonati per usare -1 in VB al
posto di True ;)
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

 posto di True ;)
Lasciamo stare. Vediamo SQL e i vari database e i vari True/False
"diligentemente" tradotti in Vero/Falso in tutte le lingue localizzate. A
volte bisogna specificare =-1, altre, <0, altre (io faccio così) <>0.
(*) Troppo spesso la "logica" fa a pugni con la schizofrenia (leggasi come
sinonimo di alcoolismo)


Io mi sono fatto due funzioncine semplicissime che convertono da
booleano a intero e viceversa, seguento la logica 1 TRUE 0 FALSE
Questo perchč il discorso "true = -1" all'inizio mi creava dei problemi,
cosě ho deciso di tagliare la testa al toro e lavorare di logica, a
differenza di Vb che invece giorno dopo giorno scopro essere piů folle!

 WeekDay).
[...]
    Infatti. Proprio sopra questa frase avevo scritto "*sulla carta*"
intendendo con questo l'help.


 Era ora!
Personalmente io preferivo la filosofia C:
False = 0 ' tutti i bit spenti
True <> 0 ' almeno un bit acceso
Però quella di 
VB.NET
 mi pare (se è così, non ho ancora verificato)
un'autentica boiata!
A meno che non si riferisca a valori unsigned, e allora forse è passabile.
In VB era lampante
False = 0 ' e fin qui c'eravamo tutti
True = -1 ' cioè NOT False, cioè tutti i bit accesi.
In Vb.net se è true = 1 è il caso di usare costantemente l'option stric ON
perchè mi vedo già milioni di app con dentro roba del genere:
If (GetAttr("miofile.txt") AND vbDirectory) then ...
' se c'è il bit di directory acceso...
Tutte if toppate in NET :) quando per anche logica dovrebbe funzionare.


 Tutte if toppate in NET :) quando per anche logica dovrebbe funzionare.
Ritengo di no: Spero vivamente che l'interpretazione di una If senza
operatore e valore di confronto sia, come sempre, "diverso da zero", non
"uguale a True" ovvero uguale a -1 o +1, che dir si voglia.

    False = 0
Mi dispiace contraddirti ma in VB.Net True=-1.
True era  uguale a 1 nella Beta1, purtroppo la comunità VB si è fatta del
male da sola ed ha chiesto a MS (per compatibilità con le precedenti
versioni di VB) di riportare True=-1, ed è stata accontentata... :-(
--
Corrado Cavalli
UGIdotNET - 
http://www.ugidotnet.org

 versioni di VB) di riportare True=-1, ed è stata accontentata... :-(
Ecco un'altra dimostrazione che M$ non esiste.
"La M$ sei tu" ;-)

Direi invece che è una altro esempio di come i programmatori VB sappiano
farsi del male da soli, la Beta1 aveva altre cose (vedi Dim degli
Array,'Option strict on by default...) solo che accettare qualche
cambiamento ottendendo in cambio dei miglioramenti, per la comunità,
abituata ai soliti schemi, certe volte fa troppa paura.


 abituata ai soliti schemi, certe volte fa troppa paura.
Corrado, la cosa mi incuriosisce e ammetto che non capisco: a parte che ci
risulta più facile pensare a numeri positivi piuttosto che negativi, perchè
+1 è preferibile a -1?

Uniformità con gli altri linguaggi (vedi C++ e C#) anche se quando passi
true a questi linguaggi il CLR rimappa -1 a +1, comunque in realtà l'unica
certezza è che False=0 e <> 0 = true.
Se hai ha che fare con bitmasks solitamente 1 rappresenta il bit settato
(quindi ON ovvero true) ecco perchè mi piace pensare true=1 ovvero
"presente"


 "presente"
Chiaro. Ecco perchè dicevo "Era ora!"

 "uguale a True" ovvero uguale a -1 o +1, che dir si voglia.
Il problema è che giustamente
If (GetAttr("miofile.txt") AND vbDirectory) then ...
potrebbe risultare con un qualsiasi valore numerico, quindi in VB che dice
True = NOT 0
tutto bene, in NET se true = 1 una directory non sarà mai intercettata :)
(vbDirectory se non sbaglio vale 32)


 (vbDirectory se non sbaglio vale 32)
Zanna, mi permetto di insistere, non con te, certo, ma con la logica che
_spero_ sia stata adottata  e mantenuta.
Non credo che la valutazione sia per True=Not 0, ma, più semplicemente sul
valore _numerico_ del risultato del test _diverso da zero_. E' molto diverso
proprio perchè, come giustamente sottolinei, non andrebbe più niente, ma
anche se True fosse -1 o 47.
Nel caso di
Dim pippo As String
If pippo Then
infatti provoca errore perchè ci si aspetta (nella "zona" non esplicitamente
indicata, dopo pippo e prima del Then) un valore numerico.

 anche se True fosse -1 o 47.
Beh, come dicevo devo ancora provare quindi il mio ragionamento č totalmente
ipotetico.
Dipende da come ragiona 
VB.NET
.
Se ragiona sul valore numerico effettivamente č un problema.
Se invecie comunque effettua un cast sul numero convertendolo in boolean il
problema non č rilevante.
Se poi vacendo un CInt(True) restituisce 1 o -1... queste sono solo
masturbazioni mentali.


 masturbazioni mentali.
None. Esattamente il contrario:
Tu pensi che:
If pippo Then
viene inteso come:
If pippo=True Then
qualunque sia il "valore" di True
Io penso che:
If pippo Then
viene inteso come:
If pippo<>0 Then
In questo caso va sempre bene perchè viene dato per vero il valore numerico
non nullo, qualunque esso sia.
Se venisse considerato "If pippo=True Then", non andrebbe più niente (nè
avrebbe potuto funzionare prima, per esempio, con pippo che vale 50, in If
(pippo-3) then), quale che sia/fosse il valore di True.
Io credo che si possa anche pensare che stiamo dicendo la stessa cosa,
dipende da come il compilatore traduce il confronto e il valore non
esplicitati. Se lo traduce in <>0 (indipendentemente dal fatto che poi
internamente lo converta in True) allora va bene, non va bene invece se, lo
confronta direttamente col valore di True.

 ' se c'è il bit di directory acceso...
AFAIK in 
VB.NET
 l'operatore AND non permette di fare AND binario.
Qualcuno puo' confermare?
