c - 验证日期到当前时间
问题描述
我正在用 c 编写一个程序,该程序需要具有必须有效且在当前日期之后的随机日期。对于这一代人来说,根本没有任何问题。我唯一不能做的就是只接受最新的日期。
我已经尝试首先检查日期是否有效,然后检查是否大于当前日期。然后我试图做相反的事情,但这些解决方案中的任何一个都没有奏效。
这是检查日期的函数:
short dateControl( const unsigned short day, const unsigned short month, const unsigned short year, const int min_year, const int max_year, struct tm curTime)
{
short correct = ZERO;
if( (year >= curTime.tm_year) && (year <= max_year) ){
if( (month >= 1) && (month <= 12) ){
if( (day >= 1 && day <= 31) && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) ){
correct = ONE;
}else if( (day >= 1 && day <= 30) && (month == 4 || month == 6 || month == 9 || month == 11) ){
correct = ONE;
}else if( (day >= 1 && day <= 28) && (month == 2) ){
correct = ONE;
}else if( day == 29 && month == 2 && (year % 400 == 0 ||(year % 4 == 0 && year % 100 != 0)) ){
correct = ONE;
}else{
correct = ZERO;
}
} else{
correct = ZERO;
}
}else{
correct = ZERO;
}
if(correct == ONE){
if( year > curTime.tm_year ){
correct = ONE;
}else if( year == curTime.tm_year ){
if( month > curTime.tm_mon ){
correct = ONE;
}else if( month == curTime.tm_mon ){
if( day > curTime.tm_mday ){
correct = ONE;
}else if(day == curTime.tm_mday){
correct = ZERO;
}else if(day < curTime.tm_mday){
correct = ZERO;
}
}else if( month < curTime.tm_mon ){
correct = ZERO;
}
}
}
}
return correct;
}
这是生成日期的部分
day = random_int(1, 31);
month = random_int(1, 12);
year = random_int(local->tm_year, local->tm_year + 1);
validDate = dateControl(tempTrip.dep_date.day, tempTrip.dep_date.month, tempTrip.dep_date.year, local->tm_year, (local->tm_year + 1), *local);
while(validDate == ZERO){
tempDriver.sub_date.day = random_int(1, 31);
tempDriver.sub_date.month = random_int(1, 12);
tempDriver.sub_date.year = random_int(local->tm_year, (local->tm_year + 1));
validDate = dateControl(tempTrip.dep_date.day, tempTrip.dep_date.month, tempTrip.dep_date.year, local->tm_year, (local->tm_year + 1), *local);
}
}
我希望如果生成的日期是 2/7/2019,而今天是 18/8/2019,则需要丢弃生成的日期并需要生成另一个。
解决方案
我正在用 c 编写一个程序,该程序需要具有必须有效且在当前日期之后的随机日期。对于这一代人来说,根本没有任何问题。我唯一不能做的就是只接受最新的日期。
您需要确定日期是否有效这一事实表明您生成随机日期的方式存在问题。
具体来说,如果您获取当前时间(使用time()
)并为其添加一个随机正值(同时注意避免溢出),然后将结果转换为日期(例如使用gmtime()
);那么你可以保证随机日期是有效的,并且在未来没有做任何检查,你可以删除你的所有dateControl()
代码。
推荐阅读
- wpf - 过滤 DataGrid 列并将对象传递给 ViewModel
- java - 回收站视图不显示 Youtube 视频
- vue.js - Vue Drawer 在调整大小时不断出现,我需要保持关闭
- performance - 使用 perf 基于可变事件计数的采样
- java - java - 如何使用java中的apache poi库在SXSSF工作表中创建数据透视表?
- python - 如何让玩家角色移动?
- winforms - 为什么这个函数在重复调用时创建位图会增加内存使用量?
- xamarin.forms - 我想使用简单的图标,例如 iOS 设置左侧的图标。使用 svg 与 png 有什么优势?
- angular - Angular 8 - 不可分配给 AsyncValidatorFn
- node.js - 无法安装 expo-cli