你的做法是错误的。首先计算“游戏时间”与“正常时间”的比率。然而,月份是有问题的,因为一个月中的天数是可变的。相反,我们可以使用四分之一 (365 / 4) 并从那里开始工作。使用秒表来跟踪已经过去了多少时间,并将其添加到参考日期以获得“实时”。那么,“游戏时间”就是经过时间乘以比率,然后加上参考时间。使用这个模型,Timer Interval() 是IRREVELANT;我们可以每分钟更新一次、每秒一次或每秒四次,并且用于确定真实/游戏时间的代码完全一样……当我们更新显示时,所有时间都保持准确:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // update once per second, but the rate here is IRREVELANT...
        // ...and can be changed without affecting the real/game timing
        timer1.Interval = 1000; 
        timer1.Tick += new EventHandler(timer1_Tick);
    }
    private DateTime dtReal;
    private DateTime dtGame;
    private DateTime dtReference;
    private System.Diagnostics.Stopwatch SW = new System.Diagnostics.Stopwatch();
    private double TimeRatio = (TimeSpan.FromDays(365).TotalMilliseconds / 4.0) / TimeSpan.FromMinutes(1).TotalMilliseconds;
    private void button1_Click(object sender, EventArgs e)
    {
        StartTime();
    }        
    private void StartTime()
    {
        dtReference = new DateTime(2013, 1, 1);
        SW.Restart();
        timer1.Start();
    }
    void timer1_Tick(object sender, EventArgs e)
    {
        UpdateTimes();
        DisplayTimes();
    }
    private void UpdateTimes()
    {
        double elapsed = (double)SW.ElapsedMilliseconds;
        dtReal = dtReference.AddMilliseconds(elapsed);
        dtGame = dtReference.AddMilliseconds(elapsed * TimeRatio);
    }
    private void DisplayTimes()
    {
        lblReference.Text = dtReference.ToString();
        lblReal.Text = dtReal.ToString();
        lblGame.Text = dtGame.ToString();
    }
}
编辑:添加截图...
一分钟后 = 大约 3 个月

四分钟后 = 大约 1 年
