Windows phone 7 我是否应该使用本地电话';s时间敏感应用程序(Windows Phone 7)

Windows phone 7 我是否应该使用本地电话';s时间敏感应用程序(Windows Phone 7),windows-phone-7,Windows Phone 7,我正在构建一个应用程序,我的用户将在其中发布内容。发帖的准确时间是一个重要的数据点——我需要知道用户何时按下“发帖”按钮。一旦帖子被捕获,我将把帖子上传到我的网络服务器上。我的应用程序仍应在脱机模式下工作,这意味着当没有互联网连接时,帖子将保存在本地,并在下次网络可用时上载 问题是,我如何保证发帖的时间是准确的?我应该依靠电话的当地时间吗?我是否应该尝试创建一些疯狂的代码,定期同步我的服务器时间和设备时间之间的差异,这样我就可以随时知道差异(如果有)。是否有我不知道的更好的时间管理解决方案 谢谢

我正在构建一个应用程序,我的用户将在其中发布内容。发帖的准确时间是一个重要的数据点——我需要知道用户何时按下“发帖”按钮。一旦帖子被捕获,我将把帖子上传到我的网络服务器上。我的应用程序仍应在脱机模式下工作,这意味着当没有互联网连接时,帖子将保存在本地,并在下次网络可用时上载

问题是,我如何保证发帖的时间是准确的?我应该依靠电话的当地时间吗?我是否应该尝试创建一些疯狂的代码,定期同步我的服务器时间和设备时间之间的差异,这样我就可以随时知道差异(如果有)。是否有我不知道的更好的时间管理解决方案

谢谢

更新 以下是我编写的服务器端代码,以确保服务器和客户端时间完全匹配。希望它能帮助别人

    /// <summary>
    /// Calculates the actual time the client event occurred.
    /// Takes in account that the event and the sending of the 
    /// event may have happened seprately.
    /// </summary>
    public static DateTime CalculateClientEventTime(
        DateTime serverReceiveTime, 
        DateTime clientSendTime, 
        DateTime clientEventTime)
    { 
        // first we need to sync the client and server time
        // we also need to subtract any time zone offsets
        // then we can subtract the actual time on de ice

        DateTime serverReceiveUtc = serverReceiveTime.ToUniversalTime();
        DateTime clientSendUtc = clientSendTime.ToUniversalTime();
        DateTime clientEventUtc = clientEventTime.ToUniversalTime();

        // note: all dates are in utc
        // just need to subtract the client TimeSpan from the client Send
        // then subtract that TimeSpan from the server utc time

        TimeSpan diffBetweenClientEventAndClientSend = (clientSendUtc - clientEventUtc);

        return serverReceiveUtc.Subtract(diffBetweenClientEventAndClientSend);
    }
//
///计算客户端事件发生的实际时间。
///考虑到事件和
///事件可能是单独发生的。
/// 
公共静态日期时间CalculateClientEventTime(
DateTime服务器接收时间,
DateTime客户端发送时间,
日期时间(客户时间)
{ 
//首先,我们需要同步客户端和服务器的时间
//我们还需要减去任何时区偏移
//然后我们可以减去除冰的实际时间
DateTime serverReceiveUtc=serverReceiveTime.ToUniversalTime();
DateTime clientSendUtc=clientSendTime.ToUniversalTime();
DateTime clienteventuct=clientEventTime.ToUniversalTime();
//注意:所有日期均以utc为单位
//只需要从客户端发送中减去客户端时间跨度
//然后从服务器utc时间中减去该时间跨度
ClientEvent和ClientSend之间的时间跨度差异=(clientSendUtc-ClientEventTutc);
返回serverReceiveUtc.Subtract(客户端事件和客户端发送之间的差异);
}

我建议您执行以下操作:

在线模式:当用户发布数据时,从服务器上抽出时间


在脱机模式下:节省手机时间。联机时,提交所有保存的数据以及手机的当前时间。计算手机和服务器之间的时间差以获得实时信息。

您不能依赖手机的时间,因为用户可以更改手机的时间,并且您的应用程序可以在不同的时区运行。始终使用服务器时间,或者您可以获取电话时间并校准本地计时器,以获取延迟值。

如果时间对您很重要,请不要依赖用户设置的时间。未意识到用户可以更改它。但是是的,我们要考虑时区。谢谢。我会小心这类事情,因为如果用户有创意的话,它会让用户发布“过去”的东西。你可能需要额外的检查,以确保他们不会像@some所说的那样“作弊”。@John:我也想到了。如果他们处于脱机状态,他们可以根据自己的需要更改时间。Wills应用程序可以检查手机的当前时间是否小于应用程序目前看到的时间,并以某种方式标记消息。但是,不要忘记,如果他们遵守夏时制,并且时间是当地时间,而不是UTC,那么当地时间可能会一年更改一次。(我总是使用UTC时间的一个原因是,夏令时的规则在世界各地都不同,而且变化太频繁)