根据系统时间自动更新自定义DateTime对象

时间:2015-09-29 10:49:18

标签: c# unity3d

我认为我的问题有点令人困惑,因为我不确定如何给它一个合适的标题。

无论如何,我的问题是因为我在服务器上获得当前日期而不是系统时间(或设备的时间)。我怎样才能让它像一个“时钟”?

例如:

// I have a string of date retrieved from server, let's call it as "stringFromServer"
myDate = Convert.ToDateTime(stringFromServer);

所以在上面的代码行之后,我需要myDate每秒更新一次,以便我可以随时使用它。

假设当前时间(从 myDate 获取)是09:00,在5秒后我希望它更新为09:05。

我想到的解决方案之一是在我的 Update()函数中, 我会做这样的事情:

myDate.Value.AddSeconds(deltaTime);

但我正在寻找更好的解决方案,希望我能在这里得到一些帮助。

PS:我没有使用系统时间的原因是为了防止用户更改设备设置的时间。因此,每当用户退出或重新打开应用程序时,我都必须更新myDate。

1 个答案:

答案 0 :(得分:0)

在Unity3D中,如果您希望每X秒发生一次事件,那么这样做的好方法是使用IEnumerator函数。因此,例如,如果您想跟踪自定义时间变量,您可以拥有这样的IEnumerator:

IEnumerator UpdateServerTime()
{
    while(true)
    {
        myDate.Value.AddSeconds(1);
        yield return new WaitForSeconds(1);
    }
}

此示例将继续每秒更新您的时间值1秒。正如其他用户在评论中提到的,这不是追踪时间的完美方式。但如果你想要统一追踪时间,它应该达到你想要的效果。

重要的是要记住,为了正确使用此方法,您需要像这样调用它:

StartCoroutine(UpdateServerTime());