用户输入一个时间,判断这个时间是本年的多少天(例:输入2015-1-5,结果是2015年的第5天)

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
/*
 * 本人是刚刚接触java,这些是我学习尝试写的一些java代码。如果有错误的地方,还请指教。
 * 
 * 代码已经运行过,并且能够实现功能。
 * 我的一些系统配置:JDK使用的是1.7版本。开发工具eclipse。
 * 
 * 简介:用户输入一个时间,判断这个时间是本年的多少天(例:输入2015-1-5,结果是2015年的第5天);
 * 
 * 要求:
 * 		1、判断用户输入的年月日是不是合法。
 * 			a、当用户输入的不合法时,提示重新输入。
 * 			b、当用户输入的合法时,打印结果并且退出。
 * 		2、将这些方法单独封装在一起,通过调用实现。
 * 		3、系统默认的年份起始时间是1900年以后。
 * 		4、系统默认采用的月分输出为国内的输入标准,起始值为1。
 * 			说明:后面程序中,使用的月份计算采用的是国际标准,0-11月,相当于国内1-12月。后面将不再说明。
 * 
 * 提示:本次判断输入的年月日是否合法,是在完全输入完成过后在判断的,下次更新在输入的时候就单个判断是否合法。
 * 		并且还可以通过接收字符串的形式,一次输入完成年月日,然后通过切割语句来拆分开,并且转换的整数,最后在比较。
 * 
 * 
 * 输入日期合法性判断方法:
 * 		1、判断年份必须大于1900。
 * 		2、判断月份是3、5、8、10(相当于国内的4、6、9、11)月小,每月30天。
 * 		3、判断月份是0、2、4、6、7、9、11(相当于国内的1、3、5、7、8、10、12)月大,每月31天。
 * 		4、判断月份是1(相当于国内的2月),判断是闰年还是平年,闰年29天,平年28天。
 * 
 * 程序中的方法简介:
 * 		1、date();在testMethod类中。
 * 			功能:用于接收用户的输入,并且打印最终的结果。
 * 		2、boolean judgeDate(int year,byte month,byte day);在testMethod类中。
 * 			功能:判断输入的年份是否合法,返回boolean值
 * 
 * 			
 */

//注:这个文件在mainDemo.java文件中,文件中的方法需要通过调用实现
//---------------------代码部分-------------------------------//
//创建一个包
package examtest;
public class mainDemo {
	public static void main(String[] args) {
		//调用testMethos.java中的date()方法。
		testMethod.date();
	}

}


//注:这个代码部分在tesMethod.java文件中

//---------------------代码部分-------------------------------//
//创建一个包
package examtest;
//导入所需要的包
import java.util.*;
public class testMethod {
	/*
	 * 功能:判断输入的日期是不是合法,
	 * 输入参数:接收年月日,int year,byte month,byte day
	 * 返回值:返回boolean类型数据,当输入的值合法时,返回true,否则false
	 * 
	 */
	public static boolean judgeDate(int year,byte month,byte day){
		Calendar c = Calendar.getInstance();
		//先判断年份和月份是否合法
		if(year>1900 && (month>=0 && month<12)){
			//判断是不是月小
			if(month == 3 || month == 5 || month == 8 || month == 10){
//				如果月小的话,日期的时间限制为1-31
				if(day>0 && day<31){
//					满足要求,将年月日到设置为指定的日期(这里为当前输入的日期),并且结束输入
					c.set(year, month, day);
					return true;
				}
				System.out.println("日期输入错误1!");
				//执行这句,则说明输入的年、月都正确,但是输入的日期不合法。
				return false;
			}
			//判断是不是月大
			else if(month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11){
//				如果月大的话,日期的时间限制为1-30
				if(day>0 && day<32){
//					满足要求,将年月日到设置为指定的日期(这里为当前输入的日期),并且结束输入
					c.set(year, month, day);
					return true;
				}
				System.out.println("日期输入错误2!");
				//执行这句,则说明输入的年、月都正确,但是输入的日期不合法。
				return false;
			}
//			判断本年是不是闰年,根据是不是闰年来确定day的值是不是合法
			else if(month == 1){
//				设置当前的时间为三月一日,
				c.set(year, month+1,1);
//				将时间往前推一天,就可以获取本年二月的最大值
				c.add(Calendar.DAY_OF_MONTH, -1);
//				System.out.println(c.get(Calendar.DAY_OF_MONTH));
				if(day>0 && day<c.get(Calendar.DAY_OF_MONTH)){
					c.set(year, month, day);
					return true;
				}
				System.out.println("日期输入错误3!");
				//执行这句,则说明输入的年、月都正确,但是输入的日期不合法。
				return false;
			}
		}
		System.out.println("日期输入错误4!");
		//执行这句,则说明输入的年、月输入错误。
		return false;
	}

	// 题目:输入某年某月某日,判断这一天是这一年的第几天?
	public static void date(){
		/*
		 * 创建三个变量,用于接收年、月、日
		 * 因为年的值比较大,不能采用byte类型定义,默认采用int类型,
		 * 而月份和日期都没有不大过127,所以可以使用byte类型定义
		 */
		int year;
		byte month;
		byte day;
//		创建一个Scanner对象
		Scanner sc = new Scanner(System.in);
//		进入死循环,接收输入的年月日,当输入的日期合法时,结束输入
		while(true){
			System.out.println("----》输入年份,必须是1900年以后的年份《----");
			year = sc.nextInt();
			System.out.println("----》输入月份《----");
			month = sc.nextByte();
//			系统计算的日期是从0开始的,所以在这里减1,方便后面计算
			month--;
			System.out.println("----》输入天数《----");
			day = sc.nextByte();
//			调用判断方法,判断输入的日期是否合法
			if(judgeDate(year,month,day)){
				Calendar c = Calendar.getInstance();
				c.set(year, month+1, day);
				System.out.println("今天是今年的第"+c.get(Calendar.DAY_OF_YEAR)+"天");
				break;
			}
		}
		System.out.println(year+"年"+(month+1)+"月"+day+"日");
	}
}


<a target=_blank target="_blank" href="http://download.csdn.net/detail/lmh820822/8346379">代码及图片下载地址:</a>http://download.csdn.net/detail/lmh820822/8346379

 

在 C++ 中,你可以通过以下几个步骤计算给定日期是一中的第几: 1. **获取当前年份**:首先需要获取当前的年份,可以使用 `std::chrono::system_clock` 或 `time_t` 结构从系统时间获取。 2. **判断**:判断给定年份是否为闰,闰的规则通常是能被4整除的年份是闰,但是能被100整除而不能被400整除的年份不是闰。 3. **计算给定日期到初的数**:从给定日期开始,逐月减去每个月的平均数(平月28,闰月29),再加上2月份(如果是闰则加29),最后加上初的1。 4. **处理特殊情况**:如果给定的日期是当的第一,那么直接返回1;如果是当的最后一,则需要额外检查那是不是闰的2月29日。 5. **输出结果**:将计算得到的总数作为结果输出。 下面是一个简单的示代码片段,使用了 `std::chrono` 库: ```cpp #include <iostream> #include <ctime> int main() { std::string input_date_str; int year, month, day; // 获取用户输入的日期 std::cout << "请输入日期 (格式: yyyy-mm-dd): "; std::cin >> input_date_str; // 将字符串转换为时间点 auto date = std::stol(input_date_str.substr(0, 4)); auto month_num = std::stoi(input_date_str.substr(5, 2)) - 1; // 减一对应 January 到 December auto day_num = std::stoi(input_date_str.substr(8, 2)); // 获取当前年份时间戳 time_t now = std::time(nullptr); tm* local_time = localtime(&now); int current_year = local_time->tm_year + 1900; // 时间年份+1900 if (current_year != date) { std::cerr << "输入年份无效,请确认!" << std::endl; return 1; } // 计算数 int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 平 if (is_leap_year(date)) { days_in_month[1] = 29; // 闰调整2月数 } int total_days = 0; for (int i = 0; i < month_num; ++i) { total_days += days_in_month[i]; } total_days += day_num; std::cout << "给定日期 " << input_date_str << " 是本的第 " << total_days << " 。\n"; return 0; } bool is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); // 按照闰的标准判断 } ``` 请注意,这个代码仅作为一个基础示,实际应用中你可能需要处理更复杂的边缘情况,并考虑输入验证。同时,由于 C++ 标准库并没有提供直接的方法来处理日期,上述代码依赖于本地时间和手动的月份数计算,对于跨平台需求可能不够通用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值