本帖最后由 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:}
有更好地办法一定不要保留哈。
- <font color="black" size="5">import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Scanner;
- public class Calendar1 {
- public static void main(String[] args) {
- while (true) { // while(true)为了能多吃输入
- Scanner sc = new Scanner(System.in);
- String str = sc.nextLine();
- int[] arr = changeArr(str);
- if (arr == null)
- continue; // 如果格式错误,那就继续循环吧。
- int differ = Math.abs(differ(arr));
- System.out.println("与今天相差" + differ + "天");
- getWeek(str);
- }
- }
- /**
- *
- * @param str
- * 传入一个字符串str,通过changeArr()方法获取一个arr[yyyy,MM,dd]类型的数组。
- * 通过differ(arr),获取与今天相差多少天。
- */
- private static void getWeek(String str) {
- // TODO 自动生成的方法存根
- String[] arrWeek = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
- int[] arr = changeArr(str);
- int[] arr1 = { 2014, 11, 21 }; // 给定一个日期,确定这一天2014-11-21是星期四,让下面可以计算星期
- int differ1 = differ(arr1);
- int differ = differ(arr);
- System.out.println(str + "是"
- + arrWeek[((differ - differ1 + 5) % 7 + 7) % 7]);
- }
- /**
- *
- * @param str
- * 传入一个yyyy-MM-dd格式的字符串
- * @return 然后返回一个arr[yyyy,MM,dd]格式的数组
- */
- private static int[] changeArr(String str) {
- int[] arr1 = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- if (str.matches("[0-9]+(-[0-9]{0,2}){2}")) {
- String[] strs = str.split("-");
- int[] arr = new int[3];
- for (int x = 0; x < 3; x++) {
- arr[x] = Integer.parseInt(strs[x]);
- }
- if (arr[0] % 4 == 0)
- arr1[1] = 29;
- int x = arr[1] - 1;
- int y = arr1[11];
- if (arr[1] > 12 || arr[2] > arr1[arr[1] - 1]) {
- System.out.println("输入格式不正确");
- return null;
- } else if (arr[1] == 0 || arr[2] == 0) {
- System.out.println("月份和天不能为零");
- return null;
- } else
- return arr;
- }
- System.out.println("输入格式不正确");
- return null;
- }
- /**
- *
- * @param arr1
- * 传入一个arr[yyyy,MM,dd]格式的数组通过和现在日期进行对比。
- * @return 返回与今天相差多少天的多少天。
- */
- private static int differ(int[] arr1) {
- int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- String str = "yyyy-MM-dd";
- SimpleDateFormat sdf = new SimpleDateFormat(str);
- String str3 = sdf.format(new Date());
- int[] arr2 = changeArr(str3);
- int sum = 0;
- int flag = 1;
- String str1 = "";
- String str2 = "";
- for (int x = 0; x < 3; x++) {
- str1 += arr1[x];
- str2 += arr2[x];
- }
- if (str1.compareTo(str2) < 0) {
- int[] temp = arr1;
- arr1 = arr2;
- arr2 = temp;
- flag = -1; // flag为了后面的显示正负天数。
- }
- while (!(arr1[0] == arr2[0] && arr1[1] == arr2[1])) {
- if (arr2[0] % 4 == 0) {
- arr[1] = 29;
- } else
- arr[1] = 28;
- sum += arr[arr2[1] - 1];
- arr2[1] += 1;
- if (arr2[1] == 13) {
- arr2[1] = 1;
- arr2[0] += 1;
- }
- }
- return flag * (sum + arr1[2] - arr2[2]);
- }
- }</font>
复制代码 谢谢@王世虎的提醒。bug已修复。
{:3_65:}{:3_65:}{:3_65:}
|