Soru Mevcut GMT saatini alma


UTC (GMT) saat dilimini döndüren C # içinde bir yöntem var mı? Sistemin zamanına göre değil.

Temel olarak sistem saatim doğru olmasa bile doğru UTC zamanını almak istiyorum.


40
2018-02-05 16:55


Menşei


Sadece kısa bir not: UTC zamanı ve GMT zamanı her zaman aynı şey değildir. UTC kolaydır. Net, GMT daha az. - Yes - that Jake.
@Jekke - Şey, asla dışarı çıkmıyorlar ... <1s IIRC ... - Marc Gravell♦
NTP'ye göre doğru zamana sahip sisteme neden güvenemiyorsunuz? - Tadeusz A. Kadłubowski
Çözüm buldunuz mu? - Evgeny Fedin


Cevaplar:


Aramak yerine

DateTime.Now.ToUniversalTime()

arayabilirsin

DateTime.UtcNow

Aynı şey ama daha kısa :) Belgeler İşte.


32
2018-03-12 15:30



Bu, belgelere bakarak sistem saatine dayanıyor mu? Gets a DateTime object that is set to the current date and time on this computer, expressed as the Coordinated Universal Time (UTC). Soru, sistem saatine güvenmeden UTC'de nasıl zaman alacağımızdı. Açıkçası kafam karıştı. - TEK


Sistemin zamanına göre değil mi? Bir şebeke zaman servisine veya benzer bir şeye çağrı yapmanız gerekir. Sen yazabilirsin NTP istemci veya sadece screencrape Dünya Saati ;)

.NET'in yerleşik bir NTP istemcisine sahip olduğuna inanmıyorum, ancak epeyce kullanılabilir.


18
2018-02-05 16:59





Bunu UNITY'den kullanıyorum

//Get a NTP time from NIST
//do not request a nist date more than once every 4 seconds, or the connection will be refused.
//more servers at tf.nist.goc/tf-cgi/servers.cgi
public static DateTime GetDummyDate()
{
    return new DateTime(1000, 1, 1); //to check if we have an online date or not.
}
public static DateTime GetNISTDate()
{
    Random ran = new Random(DateTime.Now.Millisecond);
    DateTime date = GetDummyDate();
    string serverResponse = string.Empty;

    // Represents the list of NIST servers
    string[] servers = new string[] {
        "nist1-ny.ustiming.org",
        "time-a.nist.gov",
        "nist1-chi.ustiming.org",
        "time.nist.gov",
        "ntp-nist.ldsbc.edu",
        "nist1-la.ustiming.org"                         
    };

    // Try each server in random order to avoid blocked requests due to too frequent request
    for (int i = 0; i < 5; i++)
    {
        try
        {
            // Open a StreamReader to a random time server
            StreamReader reader = new StreamReader(new System.Net.Sockets.TcpClient(servers[ran.Next(0, servers.Length)], 13).GetStream());
            serverResponse = reader.ReadToEnd();
            reader.Close();

            // Check to see that the signature is there
            if (serverResponse.Length > 47 && serverResponse.Substring(38, 9).Equals("UTC(NIST)"))
            {
                // Parse the date
                int jd = int.Parse(serverResponse.Substring(1, 5));
                int yr = int.Parse(serverResponse.Substring(7, 2));
                int mo = int.Parse(serverResponse.Substring(10, 2));
                int dy = int.Parse(serverResponse.Substring(13, 2));
                int hr = int.Parse(serverResponse.Substring(16, 2));
                int mm = int.Parse(serverResponse.Substring(19, 2));
                int sc = int.Parse(serverResponse.Substring(22, 2));

                if (jd > 51544)
                    yr += 2000;
                else
                    yr += 1999;

                date = new DateTime(yr, mo, dy, hr, mm, sc);

                // Exit the loop
                break;
            }
        }
        catch (Exception ex)
        {
            /* Do Nothing...try the next server */
        }
    }
return date;
}

7
2018-01-20 12:15



Kullanmak isteyebilirsiniz pool.ntp.org sizin için bir sunucu seçmesine izin vermek - abatishchev
Ah, bu mantıklı. Seçicimden daha kolay. - Nicki
@abatishchev Fikrini kullanmaya çalıştım. Ama işe yaramadı. "Hedef makine aktif olarak reddetti çünkü 140.109.1.10:13" "hata iletisini aldım." - prabhakaran
@prabhakaran: UDP'yi değil, TCP'yi deneyin. Veya 0.pool.ntp.org - abatishchev


Eğer garantili bir doğru zaman elde etmek için bir tahminde bulunacak olsaydım, bir zaman sunucusunun zamanını almak için bir NNTP sınıfı bulup yazmam gerekirdi.

Eğer ararsanız C # NTP google'da birkaç tane bulabilirsiniz uygulamaları, aksi halde NTP protokol.


3
2018-02-05 17:00





Sistem saatiniz doğru değilse, DateTime sınıfından çıktığınız hiçbir şey yardımcı olmayacaktır. Sisteminiz zaman sunucularıyla zamanı senkronize edebilir, bu nedenle eğer açıksa, çeşitli DateTime UTC yöntemleri / özellikleri doğru UTC zamanını döndürür.


1
2018-02-05 17:01