更新2
我发现了这些,但他们依赖lat长。是否有任何服务可以仅使用时区作为参数给我结果。
http://www.geonames.org/export/web-services.html#timezone
更新1
我没有使用任何服务器。数据存储在SQLite中。
我正在为Windows Phone 8创建一个健康应用程序。其中,应允许用户每天输入某些数据。因此,一旦用户为今天的日期添加了数据,他/她就可以仅在第二天输入数据。首先,我想将最后一个有效日期保存在独立存储中,并将其与当前日期进行比较。如果差异大于24小时,则应允许用户输入数据。
现在问题是如果用户从他/她的手机更改日期,DateTime.Now
值会发生变化,因此逻辑会出错。那么我该如何比较日期呢?
答案 0 :(得分:1)
最后一个有效日期应由服务器决定,而不是由用户决定。因此,当用户进行更新时,您将其上一个有效日期更新为当前服务器日期,而不是用户的日期。因此,在更新之前,您始终将用户的上一个有效日期(即上次更新的服务器日期)与当前服务器日期进行比较,看看它们是否相隔不到24小时。
答案 1 :(得分:1)
在服务器端和客户端进行验证。在这种情况下必须进行服务器端验证,但最好是进行客户端验证以减少不必要的服务器调用。
答案 2 :(得分:1)
如果用户在线,则从在线服务中获取时间和日期
How to Query an NTP Server using C#
// Convert it to the current timezone if desired
date = date.ToLocalTime();
美国国家标准与技术研究院(NIST)是使用网络时间协议(NTP)维护时钟并使时间可用的机构。所以NIST是时钟,NTP是通过互联网分发时间的方式和方法
答案 3 :(得分:0)
如果您的数据库存储在用户设备上,并且不使用任何网络连接到某种服务器,您只需要信任您的用户。
只需用DateTime.UtcNow.Today
来存储用户输入数据的日期。请勿DateTime.Now
或DateTime.UtcNow
检查是否已经过了24小时。在第二种情况下,用户将无法在第一天上午11点和第二天上午10点输入数据。
此外,我会考虑不禁止每天多次输入数据。也许您应该向用户显示他今天已经输入了一些数据的消息,并允许他更改已经给出的数据。
如果用户真的喜欢通过更改设备的日期时间来伪造某些数据,那么就让它自己做。如果应用程序在没有任何服务器的情况下完全在本地工作,他只会欺骗自己。