黑马程序员技术交流社区
标题:
for循环的简单面试题!计算你出生至今为止的总天数?
[打印本页]
作者:
貂裘换酒
时间:
2016-6-27 10:13
标题:
for循环的简单面试题!计算你出生至今为止的总天数?
/**
* 需求:算一下你来到这个世界多少天?
* 四年一闰,百年不闰,四百年再闰
* 分析:
* 根据你输入的的生日日期和获取当前时间日期计算天数
* 分段处理:
* 1.出生日期到当年年底的总天数
* 2.出生当年的下一年到今年的前一年的总天数
* 3.今年年初到现在日期的总天数
*
* @author Administrator
*
*/
public class Test9 {
public static void main(String[] args) {
//输入出生年月日
System.out.println("请输入出生的年份:");
Scanner scanner=new Scanner(System.in);
int year = scanner.nextInt();
System.out.println("请输入你出生的月份:");
int mouth = scanner.nextInt();
System.out.println("请输入你出生的日期:");
int day = scanner.nextInt();
System.out.println("你出生的年月日:"+year+"-"+mouth+"-"+day);
//获取当前时间
int num=0;//用来统计天数
//计算从你出生那年到那年年终有多少天
//计算出生当月还剩多少天
switch (mouth) {
case 1:
num=31-day;
break;
case 3:
num=31-day;
break;
case 5:
num=31-day;
break;
case 7:
num=31-day;
break;
case 8:
num=31-day;
break;
case 10:
num=31-day;
break;
case 11:
num=31-day;
break;
case 4:
num=30-day;
break;
case 6:
num=30-day;
break;
case 9:
num=30-day;
break;
case 12:
num=30-day;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){
num=29-day;
}else{
num=28-day;
}
break;
default:
break;
}
//计算出生当月到哪年年底还剩多少天
for(int i=mouth+1;i<=12;i++){
//判断出生年是否是闰年:四年一闰,百年不闰,四百年再闰
num = getToatalDayByMouth(year, i, num);
}
//得到当前时间的年月日的int类型数据
Date date=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
String string = simpleDateFormat.format(date);
String cyear = string.substring(0, 4);
String cmouth=string.substring(6, 7);
String cday = string.substring(8, string.length());
int year0 = Integer.parseInt(cyear);
int mouth0 = Integer.parseInt(cmouth);
int day0 = Integer.parseInt(cday);
System.out.println(year0);
System.out.println(mouth0);
System.out.println(day0);
//计算出生下一年到至今年初有多少天
for(int i=year+1;i<year0;i++){
//判断该年是不是闰年 四年一闰,百年不闰,四百年再闰
if(i%4==0&&i%100!=0||i%400==0){
num+=366;
}else{
num+=365;
}
}
//计算今年年初到上个月底多少天
for(int i=1;i<mouth0;i++){
//判断出生年是否是闰年:四年一闰,百年不闰,四百年再闰
num= getToatalDayByMouth(year0, i, num);
}
num+=day0;
System.out.println(num);
}
//通过获取的月份得到总天数
private static int getToatalDayByMouth(int year, int mouth, int num) {
switch (mouth) {
case 1:
num+=31;
break;
case 3:
num+=31;
break;
case 5:
num+=31;
break;
case 7:
num+=31;
break;
case 8:
num+=31;
break;
case 10:
num+=31;
break;
case 11:
num+=31;
break;
case 4:
num+=30;
break;
case 6:
num+=30;
break;
case 9:
num+=30;
break;
case 12:
num+=30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){
num+=29;
}else{
num+=28;
}
break;
default:
break;
}
return num;
}
}
复制代码
作者:
suming
时间:
2016-6-27 23:36
这个好棒的 我得看看 学习
作者:
syinys7
时间:
2016-6-28 00:00
这里swith循环不可以穿透么...
代码好长啊.{:2_33:}
作者:
淹忆
时间:
2016-6-28 00:14
太长了点吧。
作者:
唱情歌的神父
时间:
2016-6-28 07:43
也是醉了~~~~~~~~~~
作者:
貂裘换酒
时间:
2016-6-28 10:33
syinys7 发表于 2016-6-28 00:00
这里swith循环不可以穿透么...
代码好长啊.
按我的做法应该不行!一个是减日期一个是加日期! 暂时还没想到好方法!
作者:
貂裘换酒
时间:
2016-6-28 10:35
淹忆 发表于 2016-6-28 00:14
太长了点吧。
在计算日期的时候必须用这种方式呀! 希望能有人给出精简的算法!
作者:
何亚辉
时间:
2016-6-28 16:26
package com.heima.Day23;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test10 {
/**
* for循环的简单面试题!计算你出生至今为止的总天数?
*/
public static void main(String[] args) throws Exception {
System.out.println("请输入您的日期,格式为: yyyy年MM月dd日");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date d = sdf.parse(s);
Long l = System.currentTimeMillis() - d.getTime();
System.out.println("您生活的总天数为" + l / (3600 * 24 * 1000));
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2