public class DailyManager
public static void Main()
DailyRewards rewards = new DailyRewards();
DateTime dt = DateTime.Now;
DailyManager dm = new DailyManager(dt.AddDays(-3)) ;
rewards.printRewards(dm.canClaim(), dm.untilNext());
int daysPassed = dm.claim();
if ( daysPassed >= 0 ) { rewards.giveReward(daysPassed); }
rewards.printRewards(dm.canClaim(), dm.untilNext());
private DateTime nextClaim;
public DailyManager(DateTime asOf)
nextClaim = asOf.Date.AddHours(12);
return DateTime.Now > nextClaim;
public TimeSpan untilNext()
if (canClaim()) { return new TimeSpan(0); }
return nextClaim - DateTime.Now;
if (!canClaim()) { return -1; }
TimeSpan diff = DateTime.Now - nextClaim;
int daysPassed = diff.Days;
nextClaim = nextClaim.AddDays(daysPassed + 1);
testTime = nextClaim.ToString("u", System.Globalization.CultureInfo.GetCultureInfo("de-DE"));
Console.Out.WriteLine("testTime: " + testTime);
public class DailyRewards {
string[] rewards = new string[]{"cookie","cake","beer","kick in the teeth","gold star"};
public void giveReward(int daysPassed) {
Console.Out.WriteLine("You got a " + rewards[currentReward + daysPassed]);
currentReward = (currentReward + 1 + daysPassed) % rewards.Length;
public void printRewards(bool canClaim, TimeSpan untilNext) {
for ( int i = 0; i < currentReward; i++) {
Console.Out.WriteLine("Day " + (i+1) + "(claimed): " + rewards[i]);
string ready = canClaim ? "ready" : "in " + untilNext + " hours ";
Console.Out.WriteLine("Day " + (currentReward + 1) + "(" + ready + "): " + rewards[currentReward]);