代码之家  ›  专栏  ›  技术社区  ›  user

检索准确日期的最佳方法?

  •  2
  • user  · 技术社区  · 16 年前

    string date = DateTime.Now.ToString("yyyyMMdd");
    

    显然,如果用户更改了系统上的日期,这也会受到影响。

    8 回复  |  直到 10 年前
        1
  •  2
  •   Philip Wallace    16 年前

    定义“准确”?如果你不能信任系统日期,那么你需要从外部来源(即原子钟)获取时间。但是用户可能会阻止你的程序获取它(即拔下网线,用软件防火墙阻止你的时间查询)。

        2
  •  4
  •   Gabriel Magana    16 年前

    编辑 :这行得通,试试看:

    private string GetCurrentDateTime()
    {
        WebRequest request = WebRequest.Create(@"http://developer.yahooapis.com/TimeService/V1/getTime?appid=Test");
        // request.Proxy = new WebProxy("PROXYSERVERNAME", 8080); // You may or may not need this
        WebResponse response = request.GetResponse();      
    
        Double currentTimeStamp = 0;
        using (Stream stream = response.GetResponseStream())
        {
            using (XmlTextReader xmlReader = new XmlTextReader(stream))
            {
                while (xmlReader.Read())
                {
                    switch (xmlReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            if (xmlReader.Name == "Timestamp")
                            {
                                currentTimeStamp = Convert.ToDouble(xmlReader.ReadInnerXml());
                            }
                            break;
                    }
                }
    
                xmlReader.Close();
            }
        }
    
        DateTime yahooDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return yahooDateTime.AddSeconds(currentTimeStamp).AddHours(2).ToString("yyyyMMdd");     
    }
    
        3
  •  2
  •   Traveling Tech Guy    16 年前

    无论您在本地获得什么日期/时间,都取决于当前系统的时间精度。如果你想要独立的准确时间,你需要从外部的时间web服务获取它,比如 Yahoo's Server Time .

        4
  •  1
  •   kindohm    16 年前

    您可以在提供结果的服务器上实现一个非常简单的web服务或RESTful调用。只要您相信服务器的日期/时间是正确的,这就可以工作。

        5
  •  1
  •   James Black    16 年前

    由于用户可以更改bios上的时间,因此您不能相信计算机会准确。

    你唯一的另一个选择是要求他们能够访问互联网,然后你可以呼叫一个网络服务,然后拨打电话,但如果你想多疑,并限制他们知道多少,可以用RSA加密来加密,以验证你的服务是否提供了日期。

        6
  •  0
  •   Jason Kleban    16 年前

    始终以UTC时间存储-您以后会省去很多麻烦。以UTC存储,并在需要计算时转换为您需要的任何当地时间,包括夏令时。

    此外,如果存储中的时间不需要人类可读,您可以将其存储在Ticks中,以使其最不容易出错:

    DateTimeOffset stampUtc=新的DateTimeOffset(长解析(滴答),时间跨度。零);

        7
  •  0
  •   LBushkin    16 年前

    我相信美国海军维护着一组NTP服务器。查看: http://tycho.usno.navy.mil/ntp.html

    如果你需要对当前时间进行超级安全、高弹性的访问,你需要对你正在运行的硬件进行一定程度的控制。毕竟,用户可以拔出他们的网线,欺骗网络上的IP地址,阻止端口和IP地址,更改他们的HOSTS文件,以及各种可能干扰网络请求的事情。

        8
  •  0
  •   Community Mohan Dere    9 年前

    http://time.gov/about.html

    此外,要使用NTP,您可能需要看看这个。 How to Query an NTP Server using C#?

    推荐文章