Ahoj, děl takovou menší aplikai, a chtěl bych aby se v ní střídal den a noc podle skutečnosti.. myslím, že pomocí datetime.now to nebude příliš vhodné.. přecijenom nemusí mít každý nastavený správný čas.. proto bych se chtel zeptat, jestli existuje způsob.. kterým bych třeba zjištoval daný čas daného pásma na internetu.
Fórum › .NET
Skutečný čas
Ahoj, můžeš se pokusit zjišťovat čas s pomocí NTP serveru:
http://www.google.com/search?hl=cs&client=opera&rls=cs&hs=WqI&q=NTP+c%23&btnG=Hledat&lr=
.Dušan Janošík | web: djanosik.cz, @djanosik
Ahoj.
Nebo lze použít následující kód:
public static System.DateTime GetNISTTime() {
// Promenna pro chybova hlaseni
string errors = null;
// Pole pro dotazovane servery
string[] servers = {"time-a.nist.gov", "time-b.nist.gov", "time.nist.gov", "utcnist.colorado.edu", "nist1.datum.com"};
// Cyklus, kde jsou dotazovany servery, dokud neni OK
for (int i = 0; i < servers.Length; i++) {
TcpClient tcpClient = null;
try {
// Vytvoreni TCP a nastaveni prodlevy pro prijem
tcpClient = new TcpClient();
tcpClient.ReceiveTimeout = 1000;
// Pokus o navazani spojeni na server
tcpClient.Connect(servers[i], 13);
NetworkStream networkStream = tcpClient.GetStream();
string result = null;
if (networkStream.CanWrite && networkStream.CanRead) {
// prijem vysledku a jeho konverze na ASCII
byte[] bytes = new byte[tcpClient.ReceiveBufferSize];
try {
networkStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize);
result = Encoding.ASCII.GetString(bytes);
} catch (Exception ex) {
// ups, chybicka se vloudila
if (errors != null) errors += "\r\n";
errors += "Chyba serveru '" + servers[i] + ": " + ex.Message;
}
}
if (result != null) {
// VYsledek je ve tvaru JJJJJ YR-MO-DA HH:MM:SS TT L H msADV UTC(NIST) OTM
string[] token = result.Split(' ');
// kontrola poctu tokenu
if (token.Length >= 6) {
// Zjisteni a kontrola zdravi serveru 0.OK
string health = token[5];
if (health == "0") {
// Vse je OK, tak se konecne dostavame k parsovani datumu
string[] dates = token[1].Split('-');
string[] times = token[2].Split(':');
// zalozeni a naplneni instance DateTime
System.DateTime utcDate =
new System.DateTime(Int32.Parse(dates[0]) + 2000,
Int32.Parse(dates[1]), Int32.Parse(dates[2]),
Int32.Parse(times[0]), Int32.Parse(times[1]),
Int32.Parse(times[2]));
// Prevod na aktualni casove pasmo
return TimeZone.CurrentTimeZone.ToLocalTime(utcDate);
} else {
// ups, chybycka
if (errors != null) errors += "\r\n";
errors += "Chyba serveru '" + servers[i] + ": Zdravi je : " + health;
}
} else {
// ups, chybycka
if (errors != null) errors += "\r\n";
errors += "Chyba serveru '" + servers[i] + ": chybny pocet tokenu";
}
}
} catch (Exception ex) {
// ups, chybycka
if (errors != null) errors += "\r\n";
errors += "Chyba serveru '" + servers[i] + ": " + ex.Message;
} finally {
try {
// a koncime :-)
tcpClient.Close();
} catch { }
}
}
// No a pokud jsme dosli az sem, zrejme jsme nic nedostali a tak vyhodime vyjimku
throw new Exception(errors);
}
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 7 hostů
Moderátoři diskuze