小伙的java之旅——日历

下面在我编写简易日历的时候遇到的问题以及源码。

首先上图:

这里写图片描述

源码


MyCalender 类

package org.zw.jopo;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class MyCalender {

public static Date d;

public static void main(String[] args) {
    System.out.println("请输入日期:(年月日,格式:2008-8-8):");
    Scanner s = new Scanner(System.in);
    String str = s.next();
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    try {
        //把输入的字符串变为时间。
        d = df.parse(str);
//          System.out.print(d);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("请按正确格式输入");
        }

    MyWeek m = new MyWeek();
    m.myWeek();
    }
}

MyWeek类

package org.zw.jopo;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class MyWeek {

    private Calendar gc = new GregorianCalendar();

    public final static String[] week = {"日","一","二","三","四","五","六"}; 
    /**
     * 按星期输出月数 
     */
    public void myWeek(){
        //以列表的形式输出星期日到星期一
        for (int i = 0; i <= 6 ; i++) {
            System.out.print(week[i] + "\t");
        }

        //获取输入的日期是几月;
        gc.setTime(MyCalender.d);
        int nowMonth = gc.get(Calendar.MONTH) + 1;
        int nowDayOfMonth = gc.get(Calendar.DAY_OF_MONTH) - 1;
        //设置每月第一天
        gc.set(Calendar.DAY_OF_MONTH, 1);
        //这一句必须在 gc.set(Calendar.DAY_OF_MONTH, 1);下面
        //星期几
        int nowDayOfWeek = gc.get(Calendar.DAY_OF_WEEK) - 1;

        //获取当月有多少天
        int maxDayOfMonth = gc.getActualMaximum(Calendar.DATE);
        System.out.println();

        for (int j = 0; j < nowDayOfWeek; j++) {
            System.out.print("\t");
        }

        for (int i = 1; i <= maxDayOfMonth; i++) {
//          nowDayOfWeek++;
            System.out.print(i + "\t");
            //必须重新获取
            int w = gc.get(Calendar.DAY_OF_WEEK);
//          if(nowDayOfWeek % 7 == 0){
            if(w == Calendar.SATURDAY){
                System.out.println();
            }
            gc.add(Calendar.DATE, 1);

            //显示当前日期
            if(nowDayOfMonth == i){
                System.out.print("*");
            }
        }
    }
}

主要问题

1.判断月时发现Date类里面的getMonth()已被废弃。

解决:
使用GregorianCalendar类中的setTime(Date date); 方法,将从控制台读取到String值转化为Date 时间值传给GregorianCalendar的对象。然后通过GregorianCalendar的对象调用get(); 方法从而获取输入时间的月,天等信息。

2.不能把日期按星期几并且在第几行第几列有规律显示出来。

解决:使用GregorianCalendar.set(Calendar.DAY_OF_MONTH, 1); 把每月的第一天显示出来,然后判断第一天是星期几,最后判断换行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值