J'essaie de déterminer un TimeSpan (par exemple, temps entre la déconnexion et la connexion), mais avec la mise en garde qu'une partie de chaque jour ne devrait pas être compté (p. ex., ne comptez pas l'heure entre 19 h et 7 h un jour donné). Il est assez facile de supprimer ce délai d'une journée entière, mais quel est le meilleur moyen de vérifier les parties d'une journée (par exemple, l'utilisateur se déconnecte à 18 heures et se reconnecte à 20 heures le même jour) et d'autres cas?C#: Edge Cas lors de la suppression quotidienne d'un sous-jour d'un TimeSpan
ETA: J'ai actuellement obtenu un set-up qui ressemble à ceci:
public class HasProductiveHours
{
//These fields should represent an hour of the day (in 24-hour format)
// in which production should start or stop.
public int startProductiveHour;
public int endProductiveHour;
//Resource type enum
public ResourceType resourceType
//How often this resource is collected, in seconds
public float harvestTime
public HasProductiveHours (int startProductiveHour, int endProductiveHour, ResourceType resourceType, int harvestTime)
{
// Other creation-time things
this.startProductiveHour = startProductiveHour;
this.endProductiveHour = endProductiveHour;
this.resourceType = resourceType;
this.harvestTime = harvestTime;
TimeSimulator.Instance.SimulateElapsedTime (this);
}
}
Les instances de cette classe et ses enfants simulent la production d'une ressource toutes les heures (en fonction de la ressource) . Un système est en place pour simuler le temps écoulé depuis la dernière déconnexion de l'utilisateur.
DateTime lastLogoutTime;
public void Logout()
{
// Other logout things
lastLogoutTime = DateTime.Now;
}
public void SimulateElapsedTime (HasProductiveHours toSimulate)
{
DateTime currentTime = DateTime.Now;
TimeSpan timeSinceLogout = currentTime - lastLogout;
int unproductiveHours = Math.Abs (toSimulate.startProductionHour - toSimulate.endProductionHour) * timeSinceLogout.Days;
timeSinceLogout.Subtract (new TimeSpan (unproductiveHours, 0, 0);
double secondsElapsed = timeSinceLogout.TotalSeconds;
int harvestsElapsed = (int)(secondsElapsed/toSimulate.harvestTime);
PlayerData.Instance.AddResource (toSimulate.resourceType, harvestsElapsed);
}
Vous avez pas vraiment donné nous avons assez de l'impression que votre API est capable de vous aider correctement. –