【发布时间】:2011-12-15 15:15:54
【问题描述】:
我有一个用户控件 (ascx),在 .ascx 端有两个下拉菜单 - 一个用于月份,一个用于年份。这些是针对信用卡的到期日期的。我想做一些比较来比较到期日期和当前日期(以确保卡不是无效的)。我知道如何比较事物,我只是想知道如何在没有斜线和没有日期的情况下获得当前月份和年份:-)
【问题讨论】:
-
你看过 DateTime 结构吗?
我有一个用户控件 (ascx),在 .ascx 端有两个下拉菜单 - 一个用于月份,一个用于年份。这些是针对信用卡的到期日期的。我想做一些比较来比较到期日期和当前日期(以确保卡不是无效的)。我知道如何比较事物,我只是想知道如何在没有斜线和没有日期的情况下获得当前月份和年份:-)
【问题讨论】:
你可以做这样的事情:
int mon =DateTime.Now.Month();
int yr=DateTime.Now.Year();
string date = mon + "-" + yr;
把你想要的放在中间。
【讨论】:
DateTime.Now 打一次电话。否则你会得到一个(非常非常不可能的)竞态条件。对于良好的设计,我会将当前时间作为参数传入,从而将逻辑与对DateTime.Now 的调用分开。
这是我用来检查信用卡的到期月份和年份是否在未来的一种方法。我确信有更有效的方法可以做到这一点,但它确实有效:
public static bool IsValid(int month, int year)
{
var DateTimeNow = DateTime.Now;
var MonthNow = DateTimeNow.Month;
var YearNow = DateTimeNow.Year;
if (year >= YearNow)
{
if (year > YearNow)
{
return true;
}
if (year == YearNow)
{
if (month >= MonthNow)
{
return true;
}
}
}
return false;
}
基本上,它检查年份是当前年份还是未来年份,如果是,那么我们检查它是否在未来。如果是这样,那么它返回true。如果年份与当前年份相同,那么我们检查月份是否大于或等于当前月份。如果是,我们返回 true。如果不满足任何条件,则返回 false。
像这样使用它:
int cardMonth = 5;
int cardYear = 2020;
bool cardDateIsValid = IsValid(cardMonth, cardYear);
正如我所说,我确信还有其他方法可以做到这一点,但这对我有用。
【讨论】:
还没过期?
public static bool IsValid(int month, int year)
{
if (year > DateTime.Today.Year) // later than current year
return true;
if (year < DateTime.Today.Year) // earlier than current year
return false;
return month >= DateTime.Today.Month; // current year
}
过期了? (逆)
public static bool IsExpired(int month, int year)
{
if (year > DateTime.Today.Year) // later than current year
return false;
if (year < DateTime.Today.Year) // earlier than current year
return true;
return month < DateTime.Today.Month; // current year
}
【讨论】: