Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Sincronizzare l'orologio via Internet

Ciao ragazzi......un piccolo consiglio.....
avevo intenzione di fare un programma per la synchro dell'orologio del PC
tramite uno di quei server Internet che fungono proprio a questo scopo.....
Ho provato a dare un'occhiata al documento
http://toi.iriti.cnr.it/rfc/rfc868.txt
 che spiega il protocollo, peraltro
molto semplice, che fa il tutto. Il server che uso, trovato tramite Google,
è 
tempo.ien.it
Ho fatto il programma in VB 6, usando Winsock, ma secondo me ritorna un
numero non molto corretto......
la comunicazione dovrebbe ritornare un numero a 32-bit, che indica il numero
di sec trascorsi dalle 0:00 del 1 gennaio 1900......come faccio a tradurlo
in un'ora e data reali?
Basta una Format o bisogna fare qualcosa di più?!?!?!?!?
Inoltre, qualcuno di voi ha già fatto un lavoro simile......io l'ho iniziato
più che altro per cominciare un po' di didattica con il .NET.......
Grazie!!!
--
Damiani Liborio Igor
idam...@hotmail.com
 - 
igor.d...@light.it
http://www.igordamiani.it
ICQ : 11847262

 in un'ora e data reali?
La tua domanda mi suona strana....
Se sai il numero di secondi, sai anche il numero di giorni trascorsi
(numerodisecondi/secondialgiorno), per cui basta sommare la data di partenza
(#01/01/1900 00:00:00#) con il numero ottenuto.
O forse non era quella la cosa che chiedevi?
Ciao
Alberto

un po' quello.......in effetti basta fare solo quello.....
č solo che a volte mi viene restituito un numero negativo (sembra quindi che
sia una data prima del 01/01/1900).....
e quindi mi č venuto qualche dubbio se stessi facendo la cosa giusta.......
se uso il protocollo non modo piů corretto......il codice č il seguente:
Dim Stringa As Long
Me.Winsock1.GetData Stringa, , bytesTotal
Me.Caption = Stringa / 86400
Me.Winsock1.Close
messo ovviamente nel Winsock1_DataArrival, dopo aver fatto il
Winsock1.Connect.......
perň perchč il numero č negativo!?!?!?


 Me.Caption = Stringa / 86400
BRIVIDI......
Ma stringa è di tipo String?
Allora prima lo devi convertire in un long (o un double, dipende dalla RFC
cui fai riferimento, io non la conosco).
Poi lo dividi per 86400 (double per sicurezza)
Poi lo converti in stringa formattata.
Supponendo non ci siano altri errori:
Me.Caption = Format(CDbl(#1/1/1900# + (CDbl(stringa) / CDbl(86400))),
"dd/MM/yyyy hh:mm:ss")
Ciao
Alberto

 Grazie!!!
http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&selm=eRRNPWYg%24
GA.57%40cppssbbsa04
cambia il server :))
ciao

hai ragione, in effetti č fuorviante.....
Stringa č di tipo Double, perchč con il Long mi dava errore di overflow.....
ho provato a copiare/incollare il codice che mi hai gentilmente postato, ma
anche in questo caso mi ritorna sempre 0.......
porca miseria.....
facciamo cosě.....mi leggo meglio la documentazione e poi magari mi faccio
risentire per qualcosa di piů sicuro.....
Grazie per la collaborazione!!!!!


 > Me.Caption = Stringa / 86400
Ho dato un occhio alla RFC che citi.
Ma il numero è in binario, o mi sbaglio?
Dammi il nome di un server che risponda, che faccio un paio di prove.
Ciao
Alberto

 però perchè il numero è negativo!?!?!?


tempo.ien.it
 sulla porta 37
comunque guarda il post di Franco DG, c'č una routine che fa funzionare il
tutto......
non capisco bene il perchč, ma usa una API.
ciao, e grazie ancora di tutto!!!


 non capisco bene il perchč, ma usa una API.
Come saprai, io detesto le API.
Inoltre, visto che questo ti serve per andare poi su .Net, direi che le Api
le devi proprio scartare in partenza.
Il codice giusto č qui sotto.
Devi poi considerare che l'ora che ti torna č quella di Greenwich, per cui
devi aggiungere o togliere le ore del tuo fuso.
Ciao
Alberto
PS: il codice č bruttino, ma credo sia molto comprensibile cosě com'č
scritto.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Stringa As String
Dim car1 As String, car2 As String, car3 As String, car4 As String
Dim byte1 As Integer, byte2 As Integer, byte3 As Integer, byte4 As Integer
Dim Secondi As Double
Me.Winsock1.GetData Stringa, , bytesTotal
If bytesTotal = 4 Then
    car1 = Mid(Stringa, 1, 1)
    car2 = Mid(Stringa, 2, 1)
    car3 = Mid(Stringa, 3, 1)
    car4 = Mid(Stringa, 4, 1)
    byte1 = Asc(car1)
    byte2 = Asc(car2)
    byte3 = Asc(car3)
    byte4 = Asc(car4)
'Mettere tutto su una sola riga se va a capo
    Me.Caption = Format(#1/1/1900# + (byte1 * CDbl(16777216) + byte2 *
CDbl(65536) + byte3 * CDbl(256) + byte4) / CDbl(86400), "dd/MM/yyyy
hh:mm:ss")
    Me.Winsock1.Close
End If
End Sub

già, in effetti usando le API viene a mancare proprio il discorso .NET,
l'ideale è appoggiarsi al framework così da mantenere la portabilità!!!
Grazie Albe V°, domani proverò il codice e ti saprò dire......
