问题描述
解决方案
Calendar a = Calendar.getInstance();
a.set(2016, 0, 1);
System.out.println(a.get(a.DAY_OF_YEAR)); //当前年月日在当前年的第几天
a.set(年,月-1,日).
解决方案二:
#include <stdio.h>
int yd;//定义全局变量,yd表示某一年的总天数
int aa(int x) //该函数用来判断是否是闰年
{if(((x%4==0)&&(x%100!=0))||(x%400==0)) yd=366;}
int run2(int x,int d[3])//功能函数
{int i,n=d[2],a[12]={0,31,28,31,30,31,30,31,31,30,31,30};//n表示总天数?a[1]-a[11]分别代表前11
个月的天数
if(yd==366) a[2]=29;//如果该年是闰年则2月设置为29天?否则为28天。
for(i=0;i<=d[1]-1;i++)
n=n+a[i];
printf("该日是%d年的第%d天。n",d[0],n);
return(n);
}
main()
{
int md,data[3];//md表示某个月的总天数?data[0]-data[2]分别储存年、月、日
/*开始输入年份?如果年份小于等于0?则要求重新输入*/
printf("请输入年份?n");
scanf("%d",&data[0]);
while(data[0]<=0)
{printf("输入的年份应大于0?请重新输入:n");scanf("%d",&data[0]);}
aa(data[0]);
/*开始输入月份?如果月份小于1或大于12?则要求重新输入*/
printf("请输入月份?n");
scanf("%d",&data[1]);
while(data[1]<1||data[1]>12)
{printf("输入的月份应在1-12之间?请重新输入:n");scanf("%d",&data[1]);}
/*根据输入的月份判断该月的总天数*/
switch(data[1])
{case 1:md=31;break;
case 2:if(yd==366) md=29;else md=28;break;
case 3:md=31;break;
case 4:md=30;break;
case 5:md=31;break;
case 6:md=30;break;
case 7:md=31;break;
case 8:md=31;break;
case 9:md=30;break;
case 10:md=31;break;
case 11:md=30;break;
case 12:md=31;
}
/*开始输入日?如果输入值大于该月的总天数或小于1?则要求重新输入*/
printf("请输入日?n");
scanf("%d",&data[2]);
while(data[2]>md||data[2]<1)
{printf("输入值应小于等于该月的总天数或大于等于1?请重新输入:n");scanf("%d",&data[2]);}
printf("您输入的是%d年%d月%d日?",data[0],data[1],data[2]); //data[0],data[1],data[2]分别代表
年、月、日
run2(data[0],data);//将输入的年份和数组首地址传给函数
}
二、输入某年的年份和天数?计算出该天数是这一年的几月几日?如输入2012和
60?则2012年的第60天是2012年2月29日。
#include <stdio.h>
int yd;//定义全局变量,yd表示某一年的总天数
int aa(int x)//该函数用来判断是否是闰年
{if(((x%4==0)&&(x%100!=0))||(x%400==0)) yd=366;else yd=365;}//如果是闰年则全年有366天
int run(int x,int n) //功能函数
{int i,m,d,s=0,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/m表示月份?d表示日?i用来遍历?
s用来计算月份的总和?a[1]-a[12]分别代表前12个月的天数
printf("%d年的第%d天是",x,n);
if(yd==366) a[2]=29;//如果该年是闰年则2月设置为29天?否则为28天。
for(i=0;i<12;i++)
{s=s+a[i];
if(n>s&&n<=s+a[i+1])
{m=i+1;d=n-s;}
}
printf("%d月%d日。n",m,d);
}
main()
{
int num,year;//num表示天数?year表示年份
/*开始输入年份?如果年份小于等于0?则要求重新输入*/
printf("请输入年份?n");
scanf("%d",&year);
while(year<=0)
{printf("输入的年份应大于0?请重新输入:n");scanf("%d",&year);}
aa(year);
/*开始输入天数?如果天数小于等于0或大于该年的总天数?则要求重新输入*/
printf("请输入天数?n");
scanf("%d",&num);
while(num>yd||num<=0)
{printf("输入值应小于一年的总天数?请重新输入:n");scanf("%d",&num);}
run(year,num);
}
解决方案三:
给你源码也没啥用。给你个思路吧,根据输入月做循环,1、3、5、7、8、10、12 全局变量加31 ,利用年判断2月天数,也就是判断平润年,其他月加30,再加输入日天数
解决方案四:
用Calendar来算就好了
public static void main(String[] args) {
int year = 2016;
int month = 3;
int date = 12;
Calendar cal = Calendar.getInstance();
cal.set(year, month -1, date);
System.out.println(cal.get(Calendar.DAY_OF_YEAR));
}
解决方案五:
方法很多,上面日历是最常见的一种,也可用date实现。另外确定你的答案没错?明明是第303天。
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("Gyyyy年中第D天");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String date = scanner.next();
Date dateInput = format.parse(date);
System.out.println(simpleDateFormat.format(dateInput));
}
}
解决方案六:
方法很多,上面几位已经给出了具体代码了
解决方案七:
package com.itheima;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test9 {
private static Scanner input;
public static void main(String args[]){
System.out.print("请输入一个正确的日期(格式如:2016-02-27): ");
long year = 0;
int month = 0;
int day = 0;
int countDay;
input = new Scanner(System.in);
String str = input.nextLine();
/* substring() 方法用于提取字符串中介于两个指定下标之间的字符。
* stringObject.substring(start,stop)
* 返回一个新的字符串,该字符串值包含 stringObject 的一个子字符串,
* 其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start,
* stop省略,如果省略该参数,那么返回的子串会一直到字符串的结尾。*/
year = Integer.valueOf(str.substring(0,4));
//System.out.println(year);
month = Integer.valueOf(str.substring(5, 7));
//System.out.println(month);
day = Integer.valueOf(str.substring(8));
//System.out.println(day);
countDay = Day(year, month, day);
System.out.print("今天是"
+ year + "年"
+ month + "月"
+ day + "日,");
System.out.println("是一年中的第" + countDay + "天");
}
//判断是否是闰年
public static boolean isLeapYear(long year){
boolean flag = false;
if((year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0)){
flag=true;
}
return flag;
}
//计算这一天是一年中的第几天
public static int Day(long year, int month, int day){
int daySum = 0;
for(int i=1; i<month; i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
daySum = daySum + 31;
break;
case 4:
case 6:
case 9:
case 11:
daySum = daySum + 30;
break;
case 2:
if(isLeapYear(year)){
daySum = daySum + 29;
}else{
daySum = daySum + 28;
}
}
}
return daySum+day;
}
}
时间: 2024-11-02 07:13:00