A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**
  2. * 需求:算一下你来到这个世界多少天?
  3. *      四年一闰,百年不闰,四百年再闰
  4. * 分析:
  5. *                 根据你输入的的生日日期和获取当前时间日期计算天数
  6. *      分段处理:
  7. *      1.出生日期到当年年底的总天数
  8. *      2.出生当年的下一年到今年的前一年的总天数
  9. *      3.今年年初到现在日期的总天数
  10. *
  11. * @author Administrator
  12. *
  13. */
  14. public class Test9 {
  15.         public static void main(String[] args) {
  16.                 //输入出生年月日
  17.                 System.out.println("请输入出生的年份:");
  18.                 Scanner scanner=new Scanner(System.in);
  19.                 int year = scanner.nextInt();
  20.                 System.out.println("请输入你出生的月份:");
  21.                 int mouth = scanner.nextInt();
  22.                 System.out.println("请输入你出生的日期:");
  23.                 int day = scanner.nextInt();
  24.                 System.out.println("你出生的年月日:"+year+"-"+mouth+"-"+day);
  25.                 //获取当前时间
  26.                 int num=0;//用来统计天数
  27.                 //计算从你出生那年到那年年终有多少天
  28.                 //计算出生当月还剩多少天
  29.                 switch (mouth) {
  30.                 case 1:
  31.                         num=31-day;
  32.                         break;
  33.                 case 3:
  34.                         num=31-day;
  35.                         break;
  36.                 case 5:
  37.                         num=31-day;
  38.                         break;
  39.                 case 7:
  40.                         num=31-day;
  41.                         break;
  42.                 case 8:
  43.                         num=31-day;
  44.                         break;
  45.                 case 10:
  46.                         num=31-day;
  47.                         break;
  48.                 case 11:
  49.                         num=31-day;
  50.                         break;
  51.                 case 4:
  52.                         num=30-day;
  53.                         break;
  54.                 case 6:
  55.                         num=30-day;
  56.                         break;
  57.                 case 9:
  58.                         num=30-day;
  59.                         break;
  60.                 case 12:
  61.                         num=30-day;
  62.                         break;
  63.                 case 2:
  64.                         if(year%4==0 && year%100!=0 || year%400==0){
  65.                                 num=29-day;
  66.                         }else{
  67.                                 num=28-day;
  68.                         }
  69.                         break;
  70.                 default:
  71.                         break;
  72.                 }
  73.                 //计算出生当月到哪年年底还剩多少天
  74.                 for(int i=mouth+1;i<=12;i++){
  75.                         //判断出生年是否是闰年:四年一闰,百年不闰,四百年再闰
  76.                                 num = getToatalDayByMouth(year, i, num);
  77.                         }
  78.                 //得到当前时间的年月日的int类型数据
  79.                 Date date=new Date();
  80.                 SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
  81.                 String string = simpleDateFormat.format(date);
  82.                 String cyear = string.substring(0, 4);
  83.                 String cmouth=string.substring(6, 7);
  84.                 String cday = string.substring(8, string.length());
  85.                 int year0 = Integer.parseInt(cyear);
  86.                 int mouth0 = Integer.parseInt(cmouth);
  87.                 int day0 = Integer.parseInt(cday);
  88.                 System.out.println(year0);
  89.                 System.out.println(mouth0);
  90.                 System.out.println(day0);
  91.                 //计算出生下一年到至今年初有多少天
  92.                 for(int i=year+1;i<year0;i++){
  93.                         //判断该年是不是闰年   四年一闰,百年不闰,四百年再闰
  94.                         if(i%4==0&&i%100!=0||i%400==0){
  95.                                 num+=366;
  96.                         }else{
  97.                                 num+=365;
  98.                         }
  99.                 }
  100.                 //计算今年年初到上个月底多少天
  101.                 for(int i=1;i<mouth0;i++){
  102.                         //判断出生年是否是闰年:四年一闰,百年不闰,四百年再闰
  103.                   num= getToatalDayByMouth(year0, i, num);
  104.                 }
  105.                 num+=day0;
  106.                
  107.                 System.out.println(num);
  108.                
  109.         }
  110.                 //通过获取的月份得到总天数
  111.         private static int getToatalDayByMouth(int year, int mouth, int num) {
  112.                 switch (mouth) {
  113.                 case 1:
  114.                         num+=31;
  115.                         break;
  116.                 case 3:
  117.                         num+=31;
  118.                         break;
  119.                 case 5:
  120.                         num+=31;
  121.                         break;
  122.                 case 7:
  123.                         num+=31;
  124.                         break;
  125.                 case 8:
  126.                         num+=31;
  127.                         break;
  128.                 case 10:
  129.                         num+=31;
  130.                         break;
  131.                 case 11:
  132.                         num+=31;
  133.                         break;
  134.                 case 4:
  135.                         num+=30;
  136.                         break;
  137.                 case 6:
  138.                         num+=30;
  139.                         break;
  140.                 case 9:
  141.                         num+=30;
  142.                         break;
  143.                 case 12:
  144.                         num+=30;
  145.                         break;
  146.                 case 2:
  147.                         if(year%4==0 && year%100!=0 || year%400==0){
  148.                                 num+=29;
  149.                         }else{
  150.                                 num+=28;
  151.                         }
  152.                         break;
  153.                 default:
  154.                         break;
  155.                 }
  156.                 return num;
  157.         }
  158. }
复制代码

8 个回复

倒序浏览
这个好棒的 我得看看 学习
回复 使用道具 举报
这里swith循环不可以穿透么...
代码好长啊.{:2_33:}
回复 使用道具 举报
太长了点吧。
回复 使用道具 举报
也是醉了~~~~~~~~~~

点评

欢迎精简这段代码!  发表于 2016-6-28 10:36
回复 使用道具 举报
syinys7 发表于 2016-6-28 00:00
这里swith循环不可以穿透么...
代码好长啊.

按我的做法应该不行!一个是减日期一个是加日期!  暂时还没想到好方法!
回复 使用道具 举报

在计算日期的时候必须用这种方式呀!  希望能有人给出精简的算法!
回复 使用道具 举报
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));

        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马