如何通过比较DateTime来确定它是否已经60天了



当用户第一次运行应用程序时,为我的应用程序提供一个试用期,我这样保存FirstRunTime:

string sFirstRunDate = DateTime.Today.ToShortDateString();
saveInfo.saveFirstRun(sFirstRunDate );  // saves as a string to a text file

现在每次我运行应用程序,我想看看它是否已经超过60天,如果是终止(60天试用期)。我怎么做比较呢?

string sFirstRunDate = saveInfo.getFirstRun();   // returns the string I saved earlier
DateTime dtFirstRunDate = DateTime.Parse(sFirstRunDate);  // makes it a DateTime
DateTime now = DateTime.Today.ToShortDateString();   // why am I doing this?

那么,我如何将这两个日期进行比较,看看是否超过了60天?谢谢你,

应该这样做:

var elapsed = DateTime.Today.Subtract(dtFirstRunDate);
if (elapsed.TotalDays > 60)
{
    // trial expired
}

这样做的好处是,当试用还没有过期时,您可以告诉他们试用了多久(使用elapsed.TotalDays)。

    TimeSpan t = DateTime.Now.Subtract(dtFirstRunDate);
    if (t.Days > 60)
    {
        //do something
    }

Try

if(DateTime.Parse(sFirstRunDate).AddDays(60) < DateTime.Now) {
    // trial has expired
}

这只是第一次运行,加上60天,如果当前时间大于第一次运行的时间+ 60天,则试验结束

所有其他答案在技术上都对你有用,但它们在更大的范围内是错误的。请继续阅读

//为什么要这样做?

这告诉我你没有完全掌握你要应用的概念。让我们一个一个地走。

string sFirstRunDate = DateTime.Today.ToShortDateString();

有两个问题。首先,DateTime.Today返回本地日期/时间。永远不要使用本地日期/时间进行任何计算,因为本地时间是不一致的。日光变化,穿越时区,都会影响此属性返回的本地时间。您应该使用DateTime.UtcNow.Date来获取当前的UTC时间,该时间是不受上述任何问题影响的全局时钟。

第二个问题是ToShortDateString法。它使用当前区域性转换日期/时间。你知道在世界上的其他地方,日期报告为"DD/MM/YYYY"或"YYYY-MM-DD"吗?如果用户更改当前语言环境会发生什么?为了避免这些问题,您应该使用ToString(CultureInfo.InvariantCulture)方法。

序列化第一次运行日期的正确代码是

string sFirstRunDate = DateTime.UtcNow.Date.ToString(CultureInfo.InvariantCulture);

DateTime now = DateTime. today . toshortdatestring ();//为什么要这样做?

要计算两个日期之间的差值,首先需要获取这两个日期。第一个是保存的第一次运行日期,第二个是今天。您通过将第一个运行日期反序列化到DateTime结构来完成第一部分。对于第二部分,您只需要当前日期,不需要将其序列化为字符串。所以

DateTime today = DateTime.UtcNow.Date;

现在您有了两个日期,您就有了一组关于如何实际获得差值的选项。其他答案都能很好地解决这个问题。我个人喜欢蒂莫西·沃尔特斯的回答,因为它有一个很好的副作用,给你剩下的时间进行审判。它看起来像:

DateTime dtFirstRunDate = DateTime.Parse(saveInfo.getFirstRun());
DateTime today = DateTime.UtcNow.Date;
var elapsed = today.Subtract(dtFirstRunDate);
if (elapsed.TotalDays > 60)
{
    // trial expired
}

最新更新