黑马程序员技术交流社区

标题: 怎么输入一个日期获取星期呢? [打印本页]

作者: NCry    时间: 2014-11-20 20:31
标题: 怎么输入一个日期获取星期呢?
本帖最后由 NCry 于 2014-11-21 22:27 编辑

最近发帖总是被人说是水贴,水贴最近有查的很严。让我等新手都不敢发贴了。
昨天听朋友说日历你要不要写一个?我说这个很简单吧。
后来发现GUI做起来太麻烦。就不打算做日历了。{:3_65:}{:3_65:}{:3_65:}
还是写一个核心的东西吧。那就是随便输入一个yyyy-MM-dd格式的日期,然后可以返回一个与现在相差多少天,那一天是星期几。{:3_53:}{:3_53:}{:3_53:}
所以就有了这个。
求大家指点哈。求送....币.......{:3_65:}{:3_65:}{:3_65:}

有更好地办法一定不要保留哈。
  1. <font color="black" size="5">import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. import java.util.Scanner;

  4. public class Calendar1 {

  5.         public static void main(String[] args) {
  6.                 while (true) { // while(true)为了能多吃输入
  7.                         Scanner sc = new Scanner(System.in);
  8.                         String str = sc.nextLine();
  9.                         int[] arr = changeArr(str);
  10.                         if (arr == null)
  11.                                 continue; // 如果格式错误,那就继续循环吧。
  12.                         int differ = Math.abs(differ(arr));
  13.                         System.out.println("与今天相差" + differ + "天");
  14.                         getWeek(str);
  15.                 }
  16.         }

  17.         /**
  18.          *
  19.          * @param str
  20.          *            传入一个字符串str,通过changeArr()方法获取一个arr[yyyy,MM,dd]类型的数组。
  21.          *            通过differ(arr),获取与今天相差多少天。
  22.          */
  23.         private static void getWeek(String str) {
  24.                 // TODO 自动生成的方法存根
  25.                 String[] arrWeek = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
  26.                 int[] arr = changeArr(str);
  27.                 int[] arr1 = { 2014, 11, 21 }; // 给定一个日期,确定这一天2014-11-21是星期四,让下面可以计算星期
  28.                 int differ1 = differ(arr1);
  29.                 int differ = differ(arr);
  30.                 System.out.println(str + "是"
  31.                                 + arrWeek[((differ - differ1 + 5) % 7 + 7) % 7]);
  32.         }

  33.         /**
  34.          *
  35.          * @param str
  36.          *            传入一个yyyy-MM-dd格式的字符串
  37.          * @return 然后返回一个arr[yyyy,MM,dd]格式的数组
  38.          */
  39.         private static int[] changeArr(String str) {
  40.                 int[] arr1 = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  41.                 if (str.matches("[0-9]+(-[0-9]{0,2}){2}")) {
  42.                         String[] strs = str.split("-");
  43.                         int[] arr = new int[3];
  44.                         for (int x = 0; x < 3; x++) {
  45.                                 arr[x] = Integer.parseInt(strs[x]);
  46.                         }
  47.                         if (arr[0] % 4 == 0)
  48.                                 arr1[1] = 29;
  49.                         int x = arr[1] - 1;
  50.                         int y = arr1[11];
  51.                         if (arr[1] > 12 || arr[2] > arr1[arr[1] - 1]) {
  52.                                 System.out.println("输入格式不正确");
  53.                                 return null;
  54.                         } else if (arr[1] == 0 || arr[2] == 0) {
  55.                                 System.out.println("月份和天不能为零");
  56.                                 return null;
  57.                         } else
  58.                                 return arr;
  59.                 }
  60.                 System.out.println("输入格式不正确");
  61.                 return null;
  62.         }

  63.         /**
  64.          *
  65.          * @param arr1
  66.          *            传入一个arr[yyyy,MM,dd]格式的数组通过和现在日期进行对比。
  67.          * @return 返回与今天相差多少天的多少天。
  68.          */
  69.         private static int differ(int[] arr1) {
  70.                 int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  71.                 String str = "yyyy-MM-dd";
  72.                 SimpleDateFormat sdf = new SimpleDateFormat(str);
  73.                 String str3 = sdf.format(new Date());
  74.                 int[] arr2 = changeArr(str3);
  75.                 int sum = 0;
  76.                 int flag = 1;
  77.                 String str1 = "";
  78.                 String str2 = "";
  79.                 for (int x = 0; x < 3; x++) {
  80.                         str1 += arr1[x];
  81.                         str2 += arr2[x];
  82.                 }
  83.                 if (str1.compareTo(str2) < 0) {
  84.                         int[] temp = arr1;
  85.                         arr1 = arr2;
  86.                         arr2 = temp;
  87.                         flag = -1; // flag为了后面的显示正负天数。
  88.                 }
  89.                 while (!(arr1[0] == arr2[0] && arr1[1] == arr2[1])) {
  90.                         if (arr2[0] % 4 == 0) {
  91.                                 arr[1] = 29;
  92.                         } else
  93.                                 arr[1] = 28;
  94.                         sum += arr[arr2[1] - 1];
  95.                         arr2[1] += 1;
  96.                         if (arr2[1] == 13) {
  97.                                 arr2[1] = 1;
  98.                                 arr2[0] += 1;
  99.                         }
  100.                 }
  101.                 return flag * (sum + arr1[2] - arr2[2]);
  102.         }
  103. }</font>
复制代码
谢谢@王世虎的提醒。bug已修复。

{:3_65:}{:3_65:}{:3_65:}



作者: NCry    时间: 2014-11-20 20:43
沙发必须死自己的!!{:3_53:}{:3_53:}
作者: 夏至落叶    时间: 2014-11-20 20:43
大神就是大神,多发些源码给我们学习
作者: NCry    时间: 2014-11-20 22:22
帖子果然还是要自己顶!!!!{:3_65:}{:3_65:}{:3_65:}
作者: chen_32768    时间: 2014-11-20 22:27
不错不错,学习了
作者: 朱奕东    时间: 2014-11-20 22:27
不错不错,膜拜下
作者: NCry    时间: 2014-11-20 22:29
chen_32768 发表于 2014-11-20 22:27
不错不错,学习了

谢谢支持哈{:3_53:}{:3_53:}
作者: NCry    时间: 2014-11-20 22:32
朱奕东 发表于 2014-11-20 22:27
不错不错,膜拜下

谢谢大神前来支持!!{:3_64:}{:3_64:}{:3_64:}
作者: 932755233    时间: 2014-11-20 22:39
复制下来研究下思路
作者: 王世虎    时间: 2014-11-20 23:39
当月份大于等于12的时候会报错 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
作者: NCry    时间: 2014-11-21 22:21
王世虎 发表于 2014-11-20 23:39
当月份大于等于12的时候会报错 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: ...

谢谢提醒,我这个没注意。已经改好了,白天没时间传,这就传。
作者: 艾维苏    时间: 2014-11-22 10:35
哦哦,学习一下~
作者: 王世虎    时间: 2014-11-23 11:51
NCry 发表于 2014-11-21 22:21
谢谢提醒,我这个没注意。已经改好了,白天没时间传,这就传。

学习了~~~赞
作者: HelloWorld!    时间: 2014-11-23 20:16
支持下!
作者: NCry    时间: 2014-11-23 21:23
HelloWorld! 发表于 2014-11-23 20:16
支持下!

谢谢了!
作者: 斷灬dian    时间: 2015-1-2 23:07
谢谢分享。
作者: Jason996    时间: 2015-1-3 23:35
学习了。谢谢楼主的分享!
作者: Piaoyu    时间: 2015-1-4 14:43
谢谢分享,学习了




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