黑马程序员技术交流社区

标题: 看我这代码有什么问题,跟月份相差一天 [打印本页]

作者: 酷我之情    时间: 2016-8-23 22:08
标题: 看我这代码有什么问题,跟月份相差一天
package com.heim.zuoye;

import java.util.Calendar;
import java.util.Scanner;

public class Test3 {

        /**
         *         (1)通过键盘录入日期字符串,格式(2015-10-20)
                (2)输出该日期是星期几及这一年的第几天
                (3)如输入:2015-10-20,输出"2015年-10月-20日 是 星期二,是  2015年的第 293 天"
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
               
                System.out.println("请输入日期字符串,格式(2015-10-20):");
                String line = sc.nextLine();
                String[] s = line.split("-");
                int[] arr = new int[s.length];
                for (int i = 0; i < arr.length; i++) {
                        arr[i] = Integer.parseInt(s[i]);
                }
                Calendar c = Calendar.getInstance();
                c.set(arr[0], arr[1], arr[2]);
                c.get(Calendar.DAY_OF_YEAR);
                System.out.println(c.get(Calendar.YEAR) + "-" + getNum((c.get(Calendar.MONTH)+1))
                                + "-" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "-" + getWeek(c.get(Calendar.DAY_OF_WEEK))
                                +"第" + c.get(Calendar.DAY_OF_YEAR) + "天");
        }
        public static String getWeek(int week) {
                String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
                return arr[week];
        }
        public static String getNum(int num) {
                return num > 0 ? "" + num : "0" + num;
        }

}

作者: 马蚁牙黑    时间: 2016-8-24 18:58
看不懂,咋搞
作者: 张彦虎    时间: 2016-8-24 20:42
看不懂,好高深呀
作者: 阿卜    时间: 2016-8-24 21:04
c.set(arr[0], arr[1], arr[2]);
这里有问题,你设置MONTH的时候并没有考虑到MONTH是从0开始的。或者说录入者并不会想到。
而你获取MONTH字段的时候又给它+1了,所以实际的比你期望的多了1个月。
以下是set的API文档说明。
set

public final void set(int year,
                      int month,
                      int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。
参数:
year - 用来设置 YEAR 日历字段的值。
month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
date - 用来设置 DAY_OF_MONTH 日历字段的值。
作者: itcoder    时间: 2016-8-24 22:13
顶顶顶顶顶顶顶顶顶顶顶
作者: DadouBK    时间: 2016-8-24 23:11
不太懂是什么意思,观察观察
作者: 酷我之情    时间: 2016-8-25 22:40
阿卜 发表于 2016-8-24 21:04
c.set(arr[0], arr[1], arr[2]);
这里有问题,你设置MONTH的时候并没有考虑到MONTH是从0开始的。或者说录 ...

好的 谢谢啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2