1

更新 2

我找到了这些,但它们依赖于 lat long。是否有任何服务可以仅使用时区作为参数给我结果。

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

http://worldtime.io/api/geo


更新 1

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


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

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

4

4 回答 4

1

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

如何使用 C# 查询 NTP 服务器

或者这个:C#:获取 NIST 互联网时间

 // Convert it to the current timezone if desired
    date = date.ToLocalTime(); 

美国国家标准与技术研究院 (NIST) 是维护时钟并使用网络时间协议 (NTP) 提供时间的机构。所以 NIST 是时钟,NTP 是通过互联网分配时间的方式和方法

于 2013-10-15T05:48:41.300 回答
1

最后的有效日期应该由服务器而不是用户决定。因此,当用户进行更新时,您将他们的最后一个有效日期更新为当前服务器日期,而不是用户的日期。因此,在更新之前,您总是将用户的最后一次有效日期(即他们最后一次更新的服务器日期)与当前服务器日期进行比较,并查看它们之间的时间间隔是否小于 24 小时。

于 2013-10-15T05:01:34.257 回答
1

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

于 2013-10-15T05:12:07.040 回答
0

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

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

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

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

于 2013-10-15T06:24:24.923 回答