如何强制用户一天只输入一次数据?

时间:2013-10-15 04:59:34

标签: c# datetime windows-phone-8

更新2

我发现了这些,但他们依赖lat长。是否有任何服务可以仅使用时区作为参数给我结果。

http://www.geonames.org/export/web-services.html#timezone

http://worldtime.io/api/geo


更新1

我没有使用任何服务器。数据存储在SQLite中。


我正在为Windows Phone 8创建一个健康应用程序。其中,应允许用户每天输入某些数据。因此,一旦用户为今天的日期添加了数据,他/她就可以仅在第二天输入数据。首先,我想将最后一个有效日期保存在独立存储中,并将其与当前日期进行比较。如果差异大于24小时,则应允许用户输入数据。

现在问题是如果用户从他/她的手机更改日期,DateTime.Now值会发生变化,因此逻辑会出错。那么我该如何比较日期呢?

4 个答案:

答案 0 :(得分:1)

最后一个有效日期应由服务器决定,而不是由用户决定。因此,当用户进行更新时,您将其上一个有效日期更新为当前服务器日期,而不是用户的日期。因此,在更新之前,您始终将用户的上一个有效日期(即上次更新的服务器日期)与当前服务器日期进行比较,看看它们是否相隔不到24小时。

答案 1 :(得分:1)

在服务器端和客户端进行验证。在这种情况下必须进行服务器端验证,但最好是进行客户端验证以减少不必要的服务器调用。

答案 2 :(得分:1)

如果用户在线,则从在线服务中获取时间和日期

How to Query an NTP Server using C#

或者:C#: Get NIST Internet Time

 // Convert it to the current timezone if desired
    date = date.ToLocalTime(); 
美国国家标准与技术研究院(NIST)是使用网络时间协议(NTP)维护时钟并使时间可用的机构。所以NIST是时钟,NTP是通过互联网分发时间的方式和方法

答案 3 :(得分:0)

如果您的数据库存储在用户设备上,并且不使用任何网络连接到某种服务器,您只需要信任您的用户。

只需用DateTime.UtcNow.Today来存储用户输入数据的日期。请勿DateTime.NowDateTime.UtcNow检查是否已经过了24小时。在第二种情况下,用户将无法在第一天上午11点和第二天上午10点输入数据。

此外,我会考虑不禁止每天多次输入数据。也许您应该向用户显示他今天已经输入了一些数据的消息,并允许他更改已经给出的数据。

如果用户真的喜欢通过更改设备的日期时间来伪造某些数据,那么就让它自己做。如果应用程序在没有任何服务器的情况下完全在本地工作,他只会欺骗自己。