2015-09-29 3 views
2

Я думаю, что мой вопрос немного запутан, так как я не совсем уверен, как я должен дать ему правильный заголовок.Автоматическое обновление пользовательского объекта DateTime на основе системного времени

В любом случае, мой вопрос заключается в том, что я получаю текущую дату на своем сервере вместо системного времени (или времени устройства). Как я могу заставить его действовать как «часы»?

Например:

// 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 всякий раз, когда пользователь выходит или снова открывает приложение.

+2

использовать 'Timer' и' Tick' событие? – user1666620

+0

Да, в основном мой метод Update() использует Timer и Tick. Мне было интересно, есть ли другие решения? –

+0

Не используйте единство, чтобы рассчитать свое время. Это плохая идея. Прежде всего, вам даже не нужно иметь единство, чтобы обновить ваше время. – maksymiuk

ответ

0

В Unity3D, если вы хотите, чтобы событие происходило каждые X секунд, хороший способ сделать это - использовать функцию IEnumerator. Так, например, если вы хотите следить за переменной пользовательского времени вы могли бы IEnumerator так:

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

Этот пример будет продолжать обновлять свое время varable на одну секунду, каждую секунду. Как отмечают другие пользователи в комментариях, это не идеальный способ отслеживать время. Но он должен достичь того, чего вы хотите, если вы хотите отслеживать время в единстве.

Важно помнить, что для того, чтобы использовать этот метод правильно, вы должны назвать его так:

StartCoroutine(UpdateServerTime()); 
Смежные вопросы